【问题标题】:Value objects in DDDDDD 中的值对象
【发布时间】:2014-06-03 16:28:00
【问题描述】:

我的销售模块中有OrderOrderType 类,OrderType 类用于一些分类目标并在Orders 上应用一些业务规则。每个类都有自己的表。

我想在我的项目中应用DDD 技术。 所以,我认为Order 是一个聚合根,但是OrderType 呢? 它是否也包含在Order 聚合中,还是值对象? 我认为这将是一个价值对象。 我说的对吗?

【问题讨论】:

  • 不能简单地应用 DDD 的“技术”。 DDD 是关于正确建模域,而不是根据配方按下按钮。为什么订单是聚合根?哪个是有界上下文,OrderType 是 Order 的内在特征吗?域通过 OrderType 理解什么? DDD 真的不是关于选择/猜测实体和值对象。当我看到一对多关系时,我 99.99% 确定你没有做 DDD,你仍在使用 rdbms 思维方式,在建模领域时,这在 DDD 中没有位置。
  • @MikeSW:总结:1. Order 是聚合根,因为它负责Order 和OrderLines 的持久化2. 有界上下文是sale 3. 是的OrderType 是Order 的内在特征(一些值for OrderType:InternalOrder,ExportOrder,...) 4. 为什么你说“当我看到一对多...”?模型中的一对多关系是否与 DDD 原则不一致?
  • 恐怕你都搞错了,聚合根与持久性无关,它与域概念有关。我建议您阅读有关 DDD 的更多信息,并仅使用“普通”OOP,直到您正确理解它为止。至少你不会被(错误的)假设为你在做 DDD。

标签: entity domain-driven-design value-objects domain-object


【解决方案1】:

有一个常见问题“Entity vs Value Object”。

OrderType 呢?它是否也包含在 Order 聚合中或者是 是 Value object 吗?我认为这将是一个价值对象。我说的对吗?

我会说OrderType 是一个实体,但这取决于您的域。

Value ObjectEntity 的区别很简单:

  1. 值对象在其所有属性都相等时被认为是相同的。

    当你只关心一个元素的属性和逻辑时 模型,将其归类为值对象。让它表达的意思 它传达的属性并赋予它相关的功能。对待 值对象是不可变的。

  2. 实体在具有相同身份时被视为相同。

    当一个对象以它的身份而不是它的身份来区分时 属性,使其成为模型中定义的主要内容。保持 类定义简单且专注于生命周期的连续性和 身份。

a simple “litmus test” for Entities

如果同一对象的两个实例具有不同的属性值, 但是相同的身份值,它们是同一个实体吗?

【讨论】:

    【解决方案2】:

    一如既往,“这取决于...”

    根据您的描述,它似乎应该是一个 Value 对象,或者按照 Eric Evans 的意思,没有身份的只读实体

    1. 应该OrderType 是一个单独的实体(可以发送到另一个对象)还是Order 对象的一小部分?

    2. 即使具有相同的字段(CodeTitle),OrderType 是否应该具有标识并且是唯一对象?

      是 -> 具有 ID 的实体;否 -> 值对象

    【讨论】:

      【解决方案3】:

      您甚至可能不需要一个类来模拟OrderType。如果您的编程语言支持,带有属性的枚举可能就足够了,例如

      public enum OrderType {
        [Code("ABC123")]
        OneTime = 0,
        [Code("XYZ456")]
        Repeating = 1
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-24
        • 2010-10-31
        • 2010-10-04
        • 1970-01-01
        • 2015-08-02
        • 1970-01-01
        相关资源
        最近更新 更多