7.1货物运输系统简介
(1)这里讲到了一个货物运输的实例,最初需求包括三个功能:
·跟踪货物主要处理
·事先预约货物
·货物到达处理过程中某个位置时,自动发送客户发票
对此的设计模型中可以分为以下几个对象:
(1)Handling Event 处理事件 (2)Delivery Specification 运送规格 (3)Customer (4)Carrier Movement (5)Delivery History 运送历史
7.2 隔离领域:引入应用层
在此为了防止领域职责与系统的其他部分混杂在一起,我们分为三个应用层类:
(1)跟踪查询类 (2)预定应用类 (3)事件日志应用类
这些类属于协调者,不做回答,只负责提问,回答属于领域层的工作
7.3 将ENTITY和Value Object 区别开
(1)Customer :每个Customer在第一次联系销售时,分配一个ID号,作为标识。
(2)Cargo:两个完全相同的货箱也要分开,所以需要分配一个跟踪ID,且自动生成并且对用户可见。
(3)Handing Event 和 Carrier Movent:跟踪正在发生的货物运输,要实现处理事件有一种唯一识别的方法,那就是使CargoID、完成时间和类型的组合。
(4)Location:库位位置,我们可以使用具体经纬位置来作为唯一键。
(5)Delivery History:运输历史源于货物,展示货物的输送日志,它没有自身的标识,源于它所表征的货物。
(6)Delivery Specification :作为一个Value Object.
7.4 设计运输领域中的关联
这里重点说的就是模型的循环引用:货物存在输送历史,历史产生保存了一系列事件,每个事件都是绑定货物,形成一个闭环。
7.5 AGGREGATE边界
限定边界把跟货物相关的事物都包含进去,Handing Event 是它自己的AGGREGATE的根。
7.6 选择REPOSITORY
我们需要根据应用程序的需求,来确定各实体确实需要那些Repository.
7.9 重构
为了使设计更为理想化,对现有代码保证原有功能的基础上进行重新设计。本节举例查询运输历史,如果被频繁使用查询,提高性能的基础上我们对代码进行重构,查询直接返回相关的处理事件,这样会使查询变得更加容易。
总结
模型设计在最初需求确定以后,必将是一个不断优化的过程,随着需求的不断扩展,要从模型设计、对象设计、关联关系、后期优化(重构)等多方面不断深层次的考虑优化。