Architecture 域驱动设计-聚合根设计问题

Architecture 域驱动设计-聚合根设计问题,architecture,domain-driven-design,aggregateroot,Architecture,Domain Driven Design,Aggregateroot,我目前正在重构一个系统 我有以下情况: 该系统旨在提供跨多个业务部门的公司信息。 每个公司都可以活跃在一个或多个部门。公司可以参与某些合作伙伴计划。公司可以有一个或多个合作伙伴制造商(例如,车库可以与宝马/梅赛德斯合作)等。所有这些参与都存在一个给定的时间段(有效期)。此外,像宝马这样的制造商必然会涉足一个商业领域。因此,一家公司只能是宝马的合作伙伴,前提是宝马对该公司的业务部门有效。也就是说,因为该系统不仅维护像车库这样的商业部门的公司,还维护牵引服务等 所以现在我的设计可以产生一些不变量 公

我目前正在重构一个系统

我有以下情况:

该系统旨在提供跨多个业务部门的公司信息。 每个公司都可以活跃在一个或多个部门。公司可以参与某些合作伙伴计划。公司可以有一个或多个合作伙伴制造商(例如,车库可以与宝马/梅赛德斯合作)等。所有这些参与都存在一个给定的时间段(有效期)。此外,像宝马这样的制造商必然会涉足一个商业领域。因此,一家公司只能是宝马的合作伙伴,前提是宝马对该公司的业务部门有效。也就是说,因为该系统不仅维护像车库这样的商业部门的公司,还维护牵引服务等

所以现在我的设计可以产生一些不变量

公司->任务(不缓慢变化)->业务部门


公司->合作伙伴关系(日期从-到)->组织你的解释有问题。此设计中没有聚合根

但从逻辑上讲,以下陈述可能存在冲突

像宝马这样的制造商注定要进入一个商业领域(1)

可以更改组织的业务部门分配(2)

如果他们这样做了,你必须避免其中一个

如果(2)是假的,那么一切都很好,对吗?你就是不允许这样的改变

如果(1)是错误的(或者更确切地说,不是那么严格),那么组织与商业部门的界限也应该限制在一定的时间段内。在这种情况下,你可以像合伙企业的期限限制一样制定

例如,您可以将Partnership.EndDate设置为组织->部门链接更改的日期

此外,您还可以维护组织参与的部门的一些历史列表。业务规则将强制执行合伙企业和行业分配的期限匹配


希望有帮助。(事实上,一般设计问题应该到网站上去。)

我看到了两种符合DDD的方法来执行此业务规则:

  • 聚合中的不变量应由聚合根强制执行的DDD。如果公司是您的聚合根,当您向其添加新的合作关系时,它可以检查该合作关系是否符合业务部门规则(可能使用模式:例如EligibleForPartnershipSpecification)

  • 当改变一个组织的业务部门时,最好考虑以下方面。这可能意味着检查公司存储库中的公司是否有在修改后会变得不一致的合作关系,并相应地决定要做什么(可能基于策略/战略模式)


契约是另一种强制执行不变量的聪明方法:请参见(.NET)

我怀疑这些不变量是真的。