我有几个与业务相关的域,如Purchase
,Marketing
和Economy
。将模型安排到每个域的名称空间*将会很好,但是有一些实体跨越域,如Item
。如何组织这些交叉对象?跨域域(DDD)实体的命名空间
* =和C#/ Java/Python命名空间一样。
我有几个与业务相关的域,如Purchase
,Marketing
和Economy
。将模型安排到每个域的名称空间*将会很好,但是有一些实体跨越域,如Item
。如何组织这些交叉对象?跨域域(DDD)实体的命名空间
* =和C#/ Java/Python命名空间一样。
由于您拥有Bounded Context的概念,因此您不应该在名称空间之间共享域。实际上,每个需要它的名称空间都应该有一个Item,并且每个Item都应该包含它自己的字段,如所包含的上下文所要求的。
正如埃里克埃文斯所说,为了永远不会在上下文之间共享同一个域,而只是数据,复制数据并不是一件大事。
确定您是否拥有正确的设计将需要一些域的经验,所以你应该检查你的域专家。
您可能非常需要共享内核的交叉类。你必须小心,不要在那里放置太多的泛型/逻辑类来滥用共享内核。
要添加到@ rafaels88已回答的问题,您可能需要创建一个BC特定的域构造,其中存在某个逻辑实体。例如,BC中的User
将是Author
,但在另一个BC中可能是Supervisor
。
你也可以重复一个BC中的AR作为另一个VO。 A Customer
CRM BC可能是客户的记录系统,因此包含更多信息。然而,在订单BC中,一个Customer
V0可能仅包含Id
,Name
,或许(例如)Address
。
所以你需要评估你有什么类型的对象,然后再决定把它放在哪里。