我有几个与业务相关的域名,例如Purchase
,Marketing
和Economy
。将模型排列到每个域的命名空间*会很好,但是有一些实体跨越域,如Item
。如何组织这些交叉对象?
* =与C#/ Java / Python命名空间一样。
答案 0 :(得分:3)
由于您具有Bounded Context的概念,因此不应在命名空间之间共享域。实际上,对于需要它的每个命名空间,您应该有一个Item,并且每个Item应该包含它所包含的上下文所需的自己的字段。
正如埃里克·埃文斯所说,为了永远不在上下文之间共享同一个域,而只是数据,重复数据并不是一件大事。
答案 1 :(得分:2)
确定您是否拥有正确的设计需要一些域名使用经验,因此您应该咨询您的域名专家。
对于跨领域的类,您可能需要共享内核。你必须要小心,不要滥用共享内核,因为那里放置了太多的泛型/逻辑类。
要添加@ rafaels88已回答的内容,您可能需要创建一个存在某个逻辑实体的BC特定域构造。例如,身份&中的User
访问控制 BC在一个BC中为Author
,但在另一个BC中可能为Supervisor
。
您还可以在一个BC中复制一个AR作为另一个BC中的VO。 CRM BC中的Customer
可能是客户的记录系统,因此包含更多信息。但是,在订单 BC中,Customer
VO可能只包含Id
,Name
和Address
(例如)。< / p>
因此,您需要在决定放置它的位置之前评估您拥有的对象类型。