• 学着学设计货物分发站的信息系统


    Subject: 一个货物分发站的信息系统

    Description: 有一个货物分发站,专门负责将客户送来的货物,按照一定规则来分类统计,然后将分了类的货物按相应的运输方式再分发出去。

    货物有如下属性:

    价格,重量,体积,送货目的地,接收人,发送人,预计发送时间,预计到达时间

    货物分类的规则可以是按照货物体积,重量等来分类。这个规则是根据客户要求变化的。当前货物的分类有3种,分别是类型1(价格大于1000美元的) ,类型2(除了类型1后剩下货物里重量大于10kg的),类型3(除了类型12后剩下的货物)。但是该分类规则会经常变化(比如下个月就可能会增加一种新类型:类型4——除了类型12后剩下货物里体积大于1立方米的货物,那么相应的类型3就将变成是除了类型124后剩下的货物)。

    现在需要做一个货物统计系统,操作员将货物信息录入后,系统将根据货物的类型作不同的处理:

    对于类型1的货物会将该货物的相关信息写入本地的Oracle数据库。

    对于类型2的货物会将该货物的相关信息写入本地的SQL Server数据库

    对于类型3的货物会将该货物的相关信息抛给远程的一个Web service接口。

    (因为分类会有变化的时候,所以当这些分类发生变化的时候其货物的处理也会有相应变化)

    请设计该系统的核心处理模块(UI,持久化以及和外部的接口部分可以简略),写出概要的设计方案。

    我的设计方案:

          货物分类规则会有变化,而我们处理货物要依据这些分类规则。怎么办?应用开闭原则,隔离变化点!对于每一种分类规则,都有一定的判定条件和此分类下的相应处理。而对货物分类时则必须应用现有的所有规则,并用当前货物所属规则来处理。该货物统计系统的核心业务流程如下:


    根据这些分析,容易得到以下类图:


    每一个类为一个独立的Class Library.在客户端添加对IClassificatorFactoryIRuler的引用。在应用程序配置文件中添加ClassificatorFactoryRuler1,Ruler2,…的相关配置,然后动态加载相应的程序集,创建ClassificatorRuler1,Rule2,…的实例并添加到ClassificatorFilters集合中。

          Classificator.Classify(Product p)的核心代码如下:

          foreach(IRuler r in filters)

    {

          If(r.Validate(p))

    {//p 属于r的分类规则

          r.Classify(p);//r 的分类规则进行处理

          break;//基于分类的惟一性

    }

    }

    假如因为我们的业务需求,分类规则有变化,有更多更细的分类,那么只需要添加相应的Ruler(s),并把程序集、全类名添加到配置文件中即可,在程序重新启动时即可加载所有的Ruler.

                                                                                   2007-12-24

  • 相关阅读:
    转:gpio_direction_output 与 gpio_set_value
    转:gpio_request
    转: 静态模式makefile中$(cobjs): $(obj)/%.o: $(src)/%.c
    转:misc_register、 register_chrdev 的区别总结
    转:aptitude 命令详解
    转:Ubuntu12.04 LTS 使用心得-开机挂载其他分区
    转:大端模式和小段模式简述
    转:C++中 #ifdef 和#endif的作用
    转:FIFO和DMA
    Camera Link 信号源板卡学习资料第153篇: 基于Sprtan6的Full(Base) Camera Link 信号源
  • 原文地址:https://www.cnblogs.com/fuhongwei041/p/1178970.html
Copyright © 2020-2023  润新知