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