有界上下文规则编排

时间:2015-05-26 05:58:17

标签: design-patterns domain-driven-design business-rules

我的银行核心域分为2个区分有界上下文BC1和BC2。这些BC处理非常具体的业务规则和流程(债务追回的自定义协议,以及具有法律义务的行政债务)。 BC1和BC2通过Web服务从CRM访问。客户不能同时拥有自定义协议和债务计划,并且每种情况都不包括另一种情况。因此,我们需要协调两种类型的流程(更确切地说,我们需要在每个BC中强制执行双方都允许的操作)。

你会如何策划它们?您是否会在BC2域模型中注入BC1的一些知识,反之亦然,或者您认为我们应该依赖于能够协调系统的第三个BC(BC3),并且能够了解这两种业务知识,并通过例如第三个WebService?我们只需要知道客户是否与公司达成协议,或者是否正式和合法负债。

你认为让BC1知道BC2业务的“一点点”违反了DDD原则吗?如果是orchestrator或代理,您会使用WebServices或SharedKernel吗? SharedKernel与WebServices的优缺点是什么?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您只想从另一个BC查询一个BC,以确保是否允许某些操作?

通常从另一个BC调用另一个服务,就像使用外部API一样。 所以我会这样做。

答案 1 :(得分:1)

拥有BC的重点是保持事物分离。 BC1和BC2是陌生人。如果他们分享语言,他们应该是一个BC。 BC不需要对另一方知道“少”或更多。查询另一个BC只会在以后遇到麻烦。

BC都可以通过域事件进行通信。当一个BC更改域事件(DTO)发布而另一个BC可以处理它时,在本地(在其BC内)存储它需要什么数据(在您的情况下,它意味着存储,如果客户有自定义协议/债务计划或其他事项那个BC要求做它的工作)。这样,每个BC只能使用它自己的模型而且它是自治的。

将BC作为远程服务进行处理是不可取的,因为您只需将BC1耦合到BC2,这会损害可维护性,性能,可用性和可伸缩性。