Управляемый доменом дизайн Как отображать проверенные атрибуты в разных ограниченных контекстах? - PullRequest
0 голосов
/ 05 июня 2018

В настоящее время мы работаем над большим проектом, который содержит множество ограниченных контекстов, один из которых используется для Identity and Access Control , и он содержит сущности User, Role.После входа в систему пользователь может использовать любые другие модули (ограниченный контекст), «Моя проблема» -> нам нужно отобразить информацию о пользователе, который создает или обновляет данные в другом ограниченном контексте, например, нам нужно отобразить проверенные атрибутынапример, ModifiedBy , CreatedBy пользователи У меня есть два решения для таких проблем: -

  • Доля пользователя, роль в ограниченном контексте
  • Используйте оптимизированные представления SQL, которые получают совокупные данные из ограниченного контекста, обратите внимание, что я использую одну базу данных, но с разными пакетами для каждого ограниченного контекста

1 Ответ

0 голосов
/ 05 июня 2018

В DDD, когда вам нужно использовать модели (например, Пользователи) из одного ограниченного контекста (BC) в другой ограниченный контекст, вы должны использовать Антикоррупционный слой .Это означает, что вы можете не просто использовать ту же модель, но и упрощенную, то есть с меньшим количеством атрибутов, и она должна быть неизменной (только для чтения).

Таким образом, если пользователь является сущностью в IAC BC, со многимисвойства и поведение (чтение и запись), в Remote BC это значение объекта , то есть только его ID и Name только для чтения.ACL отвечает за перевод из удаленного объекта в локальный объект Value, который может быть безопасно использован в локальном BC.

В зависимости от вашей архитектуры ACL может быть реализован с использованием задания CRON, периодически обновлять локальные объекты Value из удаленных сущностей или может реагировать на удаленные события в случае управляемых событиями архитектур (CQRS, Eventисточники).Вы даже можете привязать oplog удаленной базы данных к почти мгновенным обновлениям.

Таким образом, каждый BC должен иметь свои собственные данные, и службы, которые в нем живут, должны иметь возможность функционировать независимо.Если сервисы в одном BC будут недоступны, сервисы в другом BC должны продолжать работать.Думайте о BC как о модулях.

Некоторые рассматривают пользовательский интерфейс как другой BC.Таким образом, в этом случае optimized SQL views может жить в этом отдельном BC и действовать как модель со встроенным ACL.Однако он не может функционировать отдельно.Он также связывает другие BC вместе, заставляя вас использовать один и тот же тип базы данных или даже экземпляр во всех BC.

...