Domain driven design Eric Evans图书-货运示例

Domain driven design Eric Evans图书-货运示例,domain-driven-design,Domain Driven Design,我正在学习构成DDD基础的那本书,我对第7章中关于货物运输的例子有点执着 更具体地说,我有以下问题;“交付历史”的真正目的是什么?在我看来,这只是一个处理事件的集合。但是如果是这样,为什么它有自己的实体对象呢?特别是由于完成时间是处理事件的一部分,我无法理解交付历史中的附加值 非常感谢比我聪明的人给予的任何帮助 Tom交付历史记录的使用是为了提供一种日志类型。与在线跟踪包裹一样,您可以查看交付历史记录中的最后一个条目,这是交付货物故事中发生的最后一个事件 在现实世界中,一家公司可能会打电话给船运

我正在学习构成DDD基础的那本书,我对第7章中关于货物运输的例子有点执着

更具体地说,我有以下问题;“交付历史”的真正目的是什么?在我看来,这只是一个处理事件的集合。但是如果是这样,为什么它有自己的实体对象呢?特别是由于完成时间是处理事件的一部分,我无法理解交付历史中的附加值

非常感谢比我聪明的人给予的任何帮助


Tom

交付历史记录的使用是为了提供一种日志类型。与在线跟踪包裹一样,您可以查看交付历史记录中的最后一个条目,这是交付货物故事中发生的最后一个事件

在现实世界中,一家公司可能会打电话给船运公司说“我的货物在哪里?应该是上周二交付的!”,运营商可以使用该软件查找货物,并从交付历史中运营商可以通过查看最后一个条目发现货物在运输过程中被延误等

Evans还指出,如果交付历史记录交付规范的目标相匹配,则可以认为交付已完成。这些信息很重要,因此需要有业务逻辑围绕,以确保信息正确、有效,最重要的是需要持久化。这就是为什么交付历史记录是一个实体

交付历史记录反映了货物实际发生的情况,如 与描述目标的交付规范相反。A. Delivery History对象可以计算货物的当前位置 通过分析最后一次加载或卸载以及 相应的载体运动。成功的交付将以失败告终 满足交付目标的交付历史记录 规格

---Eric Evans,《领域驱动设计:解决软件核心的复杂性》


编辑

在Cargo类关系图上,它看起来好像Delivery History类引用了Handling事件。在这种情况下,可能存在以下交付历史记录:

  • 提供一个很好的位置来放置用于查询 交付历史记录

  • 它可能会保留一个常用的术语(可能还有物理工件) 在货物处理领域的普遍语言中

  • 传递历史记录还可以访问载体移动事件,因此 知道承运人何时到达目的港等

  • 在处理事件中添加特定于交付历史的代码将违反单一责任原则


谢谢,但还是。。。处理事件提供了类似类型的日志,不是吗?您可以查询处理事件及其完成时间,以查看特定货物的历史记录。或者交付历史记录包含的信息比处理事件更详细?或者,处理事件的完成时间意味着“预期完成时间”?我已经扩展了我的原始答案,希望这能有所帮助。如果我们完全删除交付历史记录,它不会简化事情吗?因为处理事件已经引用了货物本身,并且可以使用CargoHistoryRepository检索货物的历史记录?还是我遗漏了什么?