【发布时间】:2014-03-03 00:02:42
【问题描述】:
假设我有两个有界上下文,Shipping Context 和 Billing Context。这些上下文中的每一个都需要了解客户。
在数据级别,客户由数据库中的CustomerTbl 表表示。此表包含描述客户的所有必要列。
CustomerTbl 中的列(简化):
NamePhysicalAddressPaymentMethod
Shipping Context 与 Name 和 PhysicalAddress 相关,而 Billing Context 与 Name 和 PaymentMethod 相关。
在Shipping Context中,我已经为聚合建模Recipient:
-
Recipient现在有Name和PhysicalAddress的属性/值对象
在 Billing Context 我已经对聚合 Payer 建模:
-
Payer具有Name和PaymentMethod的属性/值对象
Recipient 和 Payer 聚合都被上下文边界完全分开。他们也有自己的存储库。
问题:
是否可以接受使用同一个“数据库表”的多个聚合(前提是它们位于单独的有界上下文中)?
在更多有界上下文中可能需要客户数据。这不意味着每个有界上下文都有许多聚合、存储库和工厂实现吗?代码会有一定程度的冗余。这不会影响可维护性吗?
是否可以在聚合之间共享属性?一个例子是客户
Name属性。这也意味着多余的验证码?
【问题讨论】:
-
能否解释一下问题3中的“共享属性”和“冗余验证码”是什么?
-
关于共享属性:在有界上下文实现(
Recipient和Payer)中,客户实体上都存在的属性。即Name。关于冗余验证:由于模型应该具有丰富的实现(自我验证和不变安全),因此两个实体中的Name属性都会存在验证。
标签: domain-driven-design repository-pattern aggregateroot onion-architecture bounded-contexts