【发布时间】:2015-04-23 16:58:35
【问题描述】:
我想听听您关于有界上下文集成的建议。 我有一个用例让我陷入困境:
- 我有一个用于
Contract管理的有界上下文。我可以将各方(例如各种外部组织)添加到合同中。为每一方选择他们的投资/贡献(例如:总额的 10%)。 SO 合同管理有两个方面:一个是行政管理(添加当事人,管理多个日期,...),另一个是财务(计划他们跨越多年的供款,检查供款消耗,...)。 - 我有另一个
Budget的有界上下文。此上下文负责组织级别的费用管理。示例:服务 A 将具有 1000 欧元的费用容量。我们可以计划预算,然后每个组织方都可以消费,购买东西,他们的一部分。为了建立预算,负责企业预算的用户可以直接分配资金或整合年度合同财务组件。当我们将合同部分集成到预算中时,我们冻结了预算中的数据,即我们将货币数据从一个数据库表复制到另一个数据库表中(添加一些审计信息)。我们只有一个数据库。
这是我挣扎的最后一部分。每个有界上下文都是一个专用应用程序。在budget 应用程序中,在当前预算中集成了合同部分后,我需要显示预算明细行。不幸的是,在预算表中,我只有金钱数据,没有关于合同的一些基本信息(对象、参考、...)。
我在想什么:
- 有时在有界上下文之间复制数据也不错。我冻结了合同中的金钱部分。我还可以冻结/复制合同的对象和引用。那么查询将只发生在
budget context内。但这里的问题是数据重复。今天我需要对象/引用,如果明天我需要更多字段......我将需要领域事件管理来保持合同/预算之间的数据同步。 - 查询预算并为每一行查询一个
contract服务,该服务将返回所需的数据。这使每个上下文保持自主,但我需要发出大量数据库请求来丰富budget details line对象。 - 只需在数据库级别进行一次连接,我们就可以完成这项工作。在这里耦合怎么样?这是简单的解决方案,也是我们今天正在做的事情(它是共享内核吗?)。如果不重新构建预算应用程序,我们似乎无法更改
contract结构。我在上下文之间没有程序化合同。
我的问题是:
如何构建需要来自 budget context 的数据的 UI 屏幕,并且每个详细信息行都需要来自 contract context 的数据?
旁注:
- 也许从一开始上下文识别和周界就错了(这是一个遗留设计)。
- 我希望保持上下文分离(松散耦合)。如果我们可以在上下文之间指定设计契约,那么维护会更容易(或者不是?)。
- 我看不到如何集成这些上下文(我需要重新读取共享内核、ustream / 下游等)。
【问题讨论】:
-
这是一个额外的、不同的有界上下文。它与现有的有界上下文有一些重叠,这很容易导致您走错路(合并上下文或将其他行为放在不属于它的上下文中)。
-
请问您将如何为这个新的第三个上下文建模? (移动其中的所有域逻辑并查询它?)。这个新的上下文也将面向
budget。它增加了复杂性。我理解你的评论。我会考虑它以及这种情况如何出现。在实现 DDD 时,Vernon 谈到了它,但没有提供示例:/ 我感觉很赤裸裸! -
我将评论扩展为答案。