7

Как правило, приемлемо, что один репозиторий может получить доступ к другому репозиторию? В частности, в этом случае у меня есть один общий корень, который использует другой общий корень, чтобы определить, какие объекты добавить. Он падает вдоль линии отношения Item/Item Type. Причина, по которой Тип элемента является агрегированным корнем, заключается в том, что они отдельно поддерживаются в инструменте управления вне сферы действия любого отдельного элемента.DDD Repository Осведомленность о других репозиториях

Если это имеет значение, я создаю только экземпляры моего репозитория через фабричную реализацию хранилища, поэтому я не создаю непосредственно его конкретное имя класса. Со временем агрегирование не известно о репозитории.

Edit - Дополнительная информация:

Конкретная реализация является то, что мы можем прикрепить изображения к документу. Мы не только можем управлять изображениями в документе, но есть разные типы изображений (например, типы определяются как реализуются, в отличие от расширения). Агрегат документа является одним из нескольких типов других объектов в системе, которые используют эти изображения, и они не все используют одни и те же типы. Хотя мы действительно применяем правила в службах домена, это более конкретно предназначено для создания агрегата документа. При построении совокупности мы имеем пять изображений определенного типа и один из двух других типов. Мы извлекаем их отдельно, потому что они хранятся в отдельных списках в совокупности. Проверка не является проблемой, но ограничивает, какие типы изображений оцениваются при сборке документа.

+0

См. Также: http://stackoverflow.com/questions/1187667/calling-a-repository-from-a-repository – M4N

ответ

6

Я думаю, это сводится к тому, что вы пытаетесь сделать. Если это какой-то шаг проверки (например, удалить все элементы, у которых есть типы элементов, срок действия которых истек), вы можете утверждать, что он принадлежит к уровню обслуживания или спецификации. С языка, который вы используете (т. Е. «Определите, какие объекты добавить»), кажется, он предлагает последнее, хотя его трудно сказать без каких-либо подробностей.

Я полагаю, что с определенной точки зрения нет реальной причины, по которой вы не можете (я ни в коем случае не являюсь супер DDD чистым), тем более, что Item и его тип можно рассматривать как совокупный корень, и это только сведения о реализации, которые необходимо предоставить консоли управления, которая предотвращает.

С другой точки зрения, похоже, что существует размывание между вашими совокупными корнями, которые могут предполагать использование двух разных контекстов. Например, можно утверждать, что инструмент управления формирует отдельный ограниченный контекст для вашего основного приложения, и поэтому случай, когда тип элемента является совокупным корнем, на самом деле не применяется. например Инструмент управления может быть когда-либо затронут только типы элементов (и никогда не элементы), в то время как ваше основное приложение может просматривать типы элементов как больше объекта значения, чем объект.

Update

Как вы упоминаете сборки документа это, кажется, как ответственность заводского класса, который может правильно собрать действующий объект (завод может использовать репозиторий типа изображения). Репозиторий должен (в моих глазах) выставлять запросы и операции добавления, а не логику для настройки сущностей (за исключением, может быть, регидратации от сохранения).

+0

Добавлена ​​дополнительная информация. Он не связан с проверкой, но связан с сборкой. Мы пытаемся «загружать» определенные типы изображений в разные группы объектов в совокупности. Например, с дополнительной информацией может быть пять «Пример изображений» и «Сводное изображение». Все они являются «имиджем», но меняются по типу «Тип изображения». «Тип изображения» используется при сборке документа, чтобы убедиться, что правильные изображения собираются из основного источника данных. –

+2

Хорошо, если это касается способа сборки агрегата, я бы сказал, что ответственность должна упасть на завод? Завод будет знать, как хранятся типы изображений и как загружать изображения. Затем вы сохраняете агрегат через репозиторий –

+0

Да, я думаю, что это лучший способ сделать это. Спасибо за помощь. –

Смежные вопросы