我有一个域模型
Customer
- 聚合根 - 因为没有客户就无法存在订单 Order
- 实体 OrderStatus
- 值对象 在我的表单中,我需要所有
OrderStatuses
的列表.我应该从存储库中获取一个空的客户实体 (AR),其中包含一个包含所有 OrderStatuses 的列表的空订单实体吗?这很尴尬。
最佳答案
嗯,这总是取决于您的问题域,但缺乏更多信息,我会说您可能需要稍微打破您的建模。
即使没有客户就不能存在订单,但它不会是客户 AR 下的子实体。您需要引入限界上下文的概念。
Customer 将是一个 BC 的 AR,而 Order 将是它自己的 BC 的 AR。
在这种情况下,您将使用 CustomerId 属性(而不是使用对象引用)从 Order 引用 Customer,因为它们属于不同的上下文,因此它们甚至可以存在于单独的微服务、单独的数据库中。
你知道我要去哪里:获取一个空的 Customer 和一个空的订单(或订单列表)只是为了到达订单状态列表是没有意义的。
即使 Order 和 Customer 确实属于同一个 BC,OrderStatus 也是引用数据,最好用枚举类型表示(或者更好,使用枚举模式)。
看看这个附加信息:
Reference data as code
Entities, Value Objects, Aggregates and Roots
关于domain-driven-design - DDD 如何获取值对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4802746/