Я читаю о репозиториях в доменно-ориентированном дизайне и шаблонах Microsoft для архитектуры микросервисов, и они оба согласны с тем, что у меня должен быть один репозиторий на каждый агрегированный корень. Я в целом согласен с этим, однако у меня проблема с именами.
Агрегировать в репозиторий как ...
Объект находится в ???
Значение равно ???
В моем конкретном сценарии у меня есть репозиторий для объекта продукта в контексте маркетингового веб-сайта.
Продукт - это совокупность сущностей маркетинговой информации ProductInfo (Aggregate Root), List of ProductSpecs и ShippingInfo, а также списка ссылок на значения RelatedProduct для других ограниченных контекстов.
Теперь в моем репозитории мне нужно собрать вместе данные из разных сущностей и объектов значений, чтобы создать совокупный корень.
Я получаю ProductInfo (root) и RelatedProducts (значение) из CMS. ProductSpecs (entity) и ShippingInformation (entity) берутся из rest apis (микросервисы, которые обрабатывают другие ограниченные контексты).
В моей первой попытке я создал репозитории / интерфейсы / pocos домена для всех сущностей, а затем заставил слой пользовательского интерфейса сопоставить их с моделями просмотра для отображения. По сути, создание агрегата для каждой сущности, однако сущности имеют форму объектов доступа к данным (потому что на данный момент они есть), и эти проблемы просачиваются в мой домен. Если и когда мы обесценим Shipping Api и перенесем его в CMS, мне придется удалить и обновить репозитории / интерфейсы, а затем обновить все на уровне пользовательского интерфейса, который затрагивает все это, потому что я изменил местоположение, где я что-то хранил.
Моя текущая попытка состоит в том, чтобы сделать Агрегат немного больше, чтобы лучше представить, как система использует объект, а не как он хранится, но я чувствую, что застрял в том, как назвать классы, которые предоставляют сущности и значения, и как спроектировать его.
Мне нужна моя CMS и логика запросов Api в отдельных проектах / dll, чтобы их можно было повторно использовать, мне нужен репозиторий, который объединяет объекты доступа к данным для создания агрегатов. Как назвать классы в проектах запросов CMS и Api? Есть ли название для шаблона, который мне следует использовать?