2015-06-22 89 views
1

我有几个与业务相关的域,如Purchase,MarketingEconomy。将模型安排到每个域的名称空间*将会很好,但是有一些实体跨越域,如Item。如何组织这些交叉对象?跨域域(DDD)实体的命名空间

* =和C#/ Java/Python命名空间一样。

回答

3

由于您拥有Bounded Context的概念,因此您不应该在名称空间之间共享域。实际上,每个需要它的名称空间都应该有一个Item,并且每个Item都应该包含它自己的字段,如所包含的上下文所要求的。

正如埃里克埃文斯所说,为了永远不会在上下文之间共享同一个域,而只是数据,复制数据并不是一件大事。

2

确定您是否拥有正确的设计将需要一些域的经验,所以你应该检查你的域专家。

您可能非常需要共享内核的交叉类。你必须小心,不要在那里放置太多的泛型/逻辑类来滥用共享内核。

要添加到@ rafaels88已回答的问题,您可能需要创建一个BC特定的域构造,其中存在某个逻辑实体。例如,BC中的User将是Author,但在另一个BC中可能是Supervisor

你也可以重复一个BC中的AR作为另一个VO。 A CustomerCRM BC可能是客户的记录系统,因此包含更多信息。然而,在订单BC中,一个CustomerV0可能仅包含Id,Name,或许(例如)Address

所以你需要评估你有什么类型的对象,然后再决定把它放在哪里。