这是一个实用的领域驱动设计问题:
从概念上讲,我认为我得到了聚合根,直到我去定义一个聚合根。
我有一个 Employee 实体,它已作为聚合根出现。在商业领域,some员工可以记录与工作相关的违规行为:
员工-----*违规行为
由于并非所有员工都受到此限制,我认为违规行为不会成为员工总数的一部分,对吗?
因此,当我想要处理员工及其相关违规行为时,这是某些服务的两个单独的存储库交互吗?
最后,当我添加违规时,该方法是在员工实体上吗?
谢谢您的帮助!
经过更多研究后,我想我已经找到了问题的答案。
保罗·斯托维尔(Paul Stovell)对类似问题的回答略有编辑国内直拨留言板 http://tech.groups.yahoo.com/group/domaindrivendesign/message/9836。将“客户”替换为“员工”,将“订单”替换为“违规”,您就明白了。
只是因为客户参考订单
并不一定意味着订单下降
在客户聚合根内。
客户的地址可能是,但是
订单可以是独立的(对于
例如,您可能有一项服务
处理所有新订单,无论是谁
客户是。不得不走
客户->订单没有任何意义
这种情况)。
从域的角度来看,您可以
甚至质疑这些的有效性
参考文献(客户参考
订单列表)。你多久会
实际上需要all订单
顾客?在某些系统中它使
从某种意义上说,但在其他情况下,一个客户
可能会下很多订单。机会是
您希望在以下时间为客户下订单
日期范围或客户的订单
尚未处理的订单或订单
尚未支付的费用等等。
您需要全部的场景
其中可能相对不常见。
然而,更有可能的是
处理订单时,您将
想要客户信息。所以在
代码,Order.Customer.Name
很有用,
但Customer.Orders[0].LineItem.SKU
-
可能没那么有用。当然,
这完全取决于您的业务
领域。
换句话说,更新客户与更新订单无关。可以想象,订单或我的案例中的违规行为可以独立于客户/员工进行处理。
如果违规有详细信息行,则违规和违规行将成为同一聚合的一部分,因为更改违规行可能会影响违规。
编辑**
我的领域中的问题是违规行为没有行为。它们基本上是发生的事件的记录。尚不确定其影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)