Настойчивость инкапсулирована через домен или настойчивость через репозиторий?

StackOverflow https://stackoverflow.com/questions/4336819

Вопрос

Если моя модель домена не должна знать / заботиться о репозитории, то как какое-то поведение нравится .UpdateOrder(...), что инкапсулирует CRUD-Update, интерфейс с репозиторий? Через доменное обслуживание?

Хорошо, тогда мой репозиторий имеет эффективное обновление Crud-Update, которое используется в сочетании с моим .UpdateOrder(...). Отказ Хорошо. Но я не хочу, чтобы кто-то использовал метод обновления на репозитории, я хочу, чтобы они проходили поведение на объекте (используйте UpdateORDER () вместо). Я бы предпочел, чтобы подобное к тому, как мою модель домена удовлетворяет инвариантам - по этому дизайну (личный набор свойств и т. Д.) - Мой репозиторий нет Раскрыть альтернативный метод «Обновление» / сохранять сущность.

Это просто проблема модификатора доступа, которая решается мной, не имея метода обновления в публике REPO. Или есть ли «лучший» ответ? Пожалуйста, помогите мне DDD Ninjas.

Это было полезно?

Решение

Строгая последовательность в DDD была бы:

var entityRepository = MyServiceLocator.Get<IEntityRepository>();
var myEntity = entityRepository.Load(<some criteria>);
myEntity.Change(something);
entityRepository.Save(myEntity);

Репозиторий всегда отвечает за обнаружение / сохранение всех изменений в рамках объекта.

(Кстати, я предполагаю, что ваша сущность является совокупным корнем)

Другие советы

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

Ты говоришь:

Хорошо. Но я не хочу, чтобы кто-то использовал метод обновления на репозитории, я хочу, чтобы они проходили поведение на объекте

Но я думаю, что это ошибается. Ваши доменные объекты несут никакой ответственности за сохранение себя, чем они печатают себя, рисуют себя на экране и т. Д. Ваш класс домена не должна была Метод UpdateOder.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top