domain-driven-design - 埃里克·埃文斯(Eric Evans)的书 - cargo 运输示例

标签 domain-driven-design

我正在学习构成 DDD 基础的书,并且在理解第 7 章中有关 cargo 的示例方面有点卡住了。

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

非常感谢比我更聪明的人的任何帮助。

汤姆

最佳答案

的使用交货历史是提供一种类型的日志。就像您在线跟踪包裹时一样,您可以查看 中的最后一个条目。交货历史这是在运送 cargo 的故事中发生的最后一件事。

在现实世界中,公司可能会调用运输公司并说“我的 cargo 在哪里?应该是上周二交付的!”,运算符(operator)可以使用该软件找到 cargo 并从交货历史运算符(operator)可以通过查看最后一个条目来发现 cargo 在运输途中延误等。

Evans 还表示,当 时,可以认为交付已完成。交货历史匹配目标交货规范 .此信息很重要,因此它需要围绕它有业务逻辑,以确保信息正确、有效,最重要的是,它需要被持久化。这就是为什么交货历史是一个实体。

Delivery History reflects what has actually happened to a Cargo, as opposed to the Delivery Specification, which describes goals. A Delivery History object can compute the current Location of the Cargo by analyzing the last load or unload and the destination of the corresponding Carrier Movement. A successful delivery would end with a Delivery History that satisfied the goals of the Delivery Specification.

--- Eric Evans, Domain-driven Design: Tackling Complexity in the Heart of Software



编辑

在 Cargo 类图上,看起来 Delivery History 类确实引用了处理事件。在这种情况下,交付历史记录可能存在于:
  • 提供一个放置查询业务逻辑的好地方
    交货历史。
  • 它可能会保留一个常用术语(也可能是物理人工制品)
    在 cargo 装卸领域的通用语言中。
  • Delivery History 还可以访问 Carrier Movement 事件,因此它
    知道承运人何时到达其目的港等。
  • 将交付历史特定代码放在处理事件中将违反单一职责原则。
  • 关于domain-driven-design - 埃里克·埃文斯(Eric Evans)的书 - cargo 运输示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25971032/

    相关文章:

    c# - 具有DDD和(Fluent-)nHibernate具有出色架构的开源C#项目?

    C# MongoDB : How can I map a domain object (BsonIgnoreIfDefault needed on Id property)

    domain-driven-design - DDD 并在域类中获取其他信息

    c# - 存储库类应该在哪里?

    domain-driven-design - DDD,识别核心域

    php - 在 CQRS 应用程序中强制执行验证/不变量

    php - 领域驱动设计,实体懒加载

    domain-driven-design - 可配置规则驱动系统中的 DDD

    c# - 如何通过聚合根控制不变量

    node.js - 如何在模块中构建nodejs应用程序?