0

我目前正在重构一个系统。

我有以下情况:

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

所以现在我的设计可能会导致一些不变量。

公司 -> 分配(不会慢慢改变) -> 业务部门

公司 -> 合伙企业(日期从 - 到) -> 组织 <- 业务部门

公司和组织必须共享相同的业务部门分配。

所以现在,可以改变一个组织的业务部门分配。那么这将是同一业务部门的规则无效。

你会如何建模这样的东西?

4

2 回答 2

2

我看到了 2 种符合 DDD 的强制执行此业务规则的方式:

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

  • 在改变组织的业务部门时,最好从“可以执行操作吗?”的角度来思考。而不是“这个实体有效吗?” . 这可能意味着检查公司存储库中的公司是否具有在修改后会变得不一致的合作伙伴关系,并相应地决定做什么(可能基于策略/策略模式)。

合同是执行不变量的另一种智能方式:请参阅http://msdn.microsoft.com/en-us/magazine/hh205755.aspx (.NET)

于 2011-12-21T13:26:35.793 回答
0

你的解释有问题。此设计中没有聚合根。

但逻辑上可能以下陈述冲突

像宝马这样的制造商绑定一个业务部门 (1)

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

如果他们这样做,您必须避免其中之一。

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

如果(1)是错误的(或者更确切地说,没有那么严格),那么组织与业务部门的界限也应该限制在某个时间段内。在这种情况下,您可以像合伙人的期限限制一样使用相同的方式。

例如,您可以将 Partnership.EndDate 设置为 Organization->Sector 链接更改的日期。

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

希望有帮助。(实际上通用设计问题应该去程序员网站。)

于 2011-12-21T10:19:09.550 回答