【发布时间】:2012-02-08 17:41:48
【问题描述】:
假设我们在系统中有两个域:Orderdomain 和 Customerdomain。
这两个域都相当复杂和庞大,因此不能将它们合并到一个域中。
但他们之间有业务关系。在每个订单上,客户都充当订购者。
我心中至少有三个解决方案。
将 customerId 作为原始类型存储在 Order 和 Customer 上。
创建两个值对象 OrderDomain.CustomerId 和 CustomerDomain.CustomerId。确保可以比较这些类型类型是否相等。
使用 valeobject CustomerId 创建第三个组件“SharedValueObjects”,并在两个域中使用该类型
哪个更受欢迎,或者你能想出第四个更好的吗?
【问题讨论】:
-
看起来当你说域时你指的是实体。问题尚不清楚,我认为您将实现细节与概念设计混合在一起。如果 Order 和 Customer 之间存在业务关系,则将该关系建模为一等公民。
-
不,我指的不是实体或聚合。我指的是不同的域。但是同样的问题也可以应用在那里,简单的答案是实体肯定可以共享相同的值对象类型。从我的角度来看,您不能仅在一个紧密耦合的领域中为大型企业建模。仅仅因为实体具有某种关系,它们就不能成为我世界上的一等公民。随着时间的推移,该领域模型将是一头野兽。
-
如何将客户与订单区分开来?一个没有另一个没有意义。没有客户的订单可以存在吗?如果不是,那它们怎么可能不在同一个域中?
标签: domain-driven-design value-objects