Скажем, у меня есть два ограниченных контекста: Контекст доставки и Контекст фактурирования. Каждый из этих контекстов должен знать о клиенте.
На уровне данных клиент представлен таблицей CustomerTbl
в базе данных. Эта таблица состоит из всех необходимых столбцов, описывающих клиента.
Столбцы в CustomerTbl
(упрощенные):
-
Name
-
PhysicalAddress
-
PaymentMethod
Контекст доставки связан с Name
и PhysicalAddress
, в то время как контекст фактуры связан с Name
и PaymentMethod
.
В контексте доставки я смоделировал агрегат Recipient
:
-
Recipient
теперь имеет свойства/значения объектов дляName
иPhysicalAddress
В контексте фактурирования я смоделировал агрегат Payer
:
-
Payer
имеет свойства/значения объектов дляName
иPaymentMethod
Оба агрегата Recipient
и Payer
полностью разделены границей контекста. У них также есть свои репозитории.
Вопросы:
-
Допустимо ли иметь несколько агрегатов (при условии, что они находятся в отдельных ограниченных контекстах), используя ту же "таблицу базы данных"?
-
Данные клиента, вероятно, понадобятся во многих более ограниченных контекстах. Не означает ли это много реализаций совокупности, репозитория и factory для каждого ограниченного контекста? В коде будет избыточность. Это не влияет на ремонтопригодность?
-
Допустимо ли иметь общие свойства для агрегатов? Примером может быть свойство клиента
Name
. Это также означает избыточный код проверки?