跨域的 (DDD) 实体的命名空间
Namespace for (DDD) entities cutting across domains
我有几个与业务相关的域,例如 Purchase
、Marketing
和 Economy
。将模型安排到每个域的名称空间* 中会很好,但是有些实体跨域,例如 Item
。如何组织那些横切对象?
* = 在 C#/Java/Python 命名空间中。
既然你有Bounded Context的概念,你就不应该在命名空间之间共享域。实际上,对于需要它的每个命名空间,您应该有一个项目,并且每个项目都应该根据包含的上下文的要求有自己的字段。
正如埃里克·埃文斯所说,复制数据并不是什么大不了的事情,因为从不在上下文之间共享相同的域,而只是数据。
确定您是否拥有正确的设计将需要一些领域经验,因此您应该咨询您的领域专家。
您很可能需要一个 共享内核 用于 类 是横切的。您必须小心,不要通过在其中放置太多通用/逻辑 类 来滥用共享内核。
要添加@rafaels88 的回答,您可能需要创建一个 BC 特定域构造,其中存在一些逻辑实体。例如,身份和访问控制 BC 中的 User
在一个 BC 中可能是 Author
,但在另一个 BC 中可能是 Supervisor
。
您还可以复制 一个 BC 中的 AR 作为另一个 VO 中的 VO。 CRM BC 中的 Customer
可能是客户的记录系统,因此包含更多信息。然而,在 Order BC 中,一个 Customer
VO 可能只包含一个 Id
、Name
,也许还有 Address
(例如).
因此,在决定放置对象之前,您需要评估对象的类型。
我有几个与业务相关的域,例如 Purchase
、Marketing
和 Economy
。将模型安排到每个域的名称空间* 中会很好,但是有些实体跨域,例如 Item
。如何组织那些横切对象?
* = 在 C#/Java/Python 命名空间中。
既然你有Bounded Context的概念,你就不应该在命名空间之间共享域。实际上,对于需要它的每个命名空间,您应该有一个项目,并且每个项目都应该根据包含的上下文的要求有自己的字段。
正如埃里克·埃文斯所说,复制数据并不是什么大不了的事情,因为从不在上下文之间共享相同的域,而只是数据。
确定您是否拥有正确的设计将需要一些领域经验,因此您应该咨询您的领域专家。
您很可能需要一个 共享内核 用于 类 是横切的。您必须小心,不要通过在其中放置太多通用/逻辑 类 来滥用共享内核。
要添加@rafaels88 的回答,您可能需要创建一个 BC 特定域构造,其中存在一些逻辑实体。例如,身份和访问控制 BC 中的 User
在一个 BC 中可能是 Author
,但在另一个 BC 中可能是 Supervisor
。
您还可以复制 一个 BC 中的 AR 作为另一个 VO 中的 VO。 CRM BC 中的 Customer
可能是客户的记录系统,因此包含更多信息。然而,在 Order BC 中,一个 Customer
VO 可能只包含一个 Id
、Name
,也许还有 Address
(例如).
因此,在决定放置对象之前,您需要评估对象的类型。