Tom*_*ker 5 domain-driven-design
我正在学习构成 DDD 基础的书,并且在理解第 7 章中有关货运的示例方面有点卡住了。
更具体地说,我有以下问题;Wat是“Delivery History”的真正目的?在我的理解中,它只是处理事件的集合。但如果是这样,为什么它有自己的实体对象呢?特别是因为完成时间是处理事件的一部分,我无法理解交付历史中的附加值......
非常感谢比我更聪明的人的任何帮助。
汤姆
Delivery History的用途是提供一种日志。就像在线跟踪包裹一样,您可以查看交付历史记录中的最后一个条目,这是交付货物的故事中发生的最后一个事件。
在现实世界中,公司可能会打电话给运输公司并说“我的货物在哪里?它应该是上周二交付的!”,操作员可以使用该软件找到货物,并且操作员可以从交付历史记录中找到货物通过查看最后的条目发现货物在运输途中延误等。
埃文斯还指出,当交付历史记录与交付规范的目标相匹配时,可以认为交付已完成。这些信息很重要,因此需要有围绕它的业务逻辑,以确保信息正确、有效,最重要的是它需要持久化。这就是为什么Delivery History是一个Entity。
交付历史记录反映了货物实际发生的情况,而不是描述目标的交付规范。交付历史对象可以通过分析上次装载或卸载以及相应承运人移动的目的地来计算货物的当前位置。成功的交付将以满足交付规范目标的交付历史记录结束。
--- Eric Evans,领域驱动设计:解决软件核心的复杂性
编辑
在 Cargo 类图上,看起来Delivery History类确实引用了Handling Events。在这种情况下,交付历史记录可能存在以下内容:
提供一个放置查询交付历史记录的业务逻辑的好地方。
它可能会保留货物处理领域通用语言中使用的通用术语(可能还有物理工件) 。
交付历史记录还可以访问承运人移动事件,因此它 知道承运人何时到达其目的地港口等。
将交付历史特定代码放入处理事件中将违反单一职责原则。