С точки зрения DDD я могу иметь хранилище для неагрегированного корня - PullRequest
0 голосов
/ 25 января 2019

В моем текущем (JPA) проекте у меня есть в основном 2 объекта.ChainOfClassesA и ClassA.Теперь ChainOfClassesA - это двунаправленный список ClassA (@OneToMany) и пара других атрибутов.Для меня кажется, что ChainOfClassesA является совокупным корнем и, следовательно, имеет выделенный репозиторий.Теперь один из вариантов использования - обновить ClassA.Я знаю, что мог бы просто создать репозиторий для ClassA, но это нарушило бы правило «один репозиторий для каждой корневой совокупной сущности», поскольку ClassA на самом деле не является сводным корнем, хотя это намекает мне на то, что это может быть или, возможно, мне следует «сгладить ChainOfClassesA»».

Теперь мой вопрос заключается в том, должен ли я быть прагматичным и «просто нарушать правила» и создать специальный репозиторий для ClassA или следовать правилам и заменить двунаправленный список @OneToMany в ChainOfClassesA идентификатором ссылки на ChainOfClassesA в ClassA.Первый подход прагматичен и требует лишь небольшой работы, тогда как второй подход требует также некоторых других изменений в кодовой базе.о чем ты думаешь?Особенно, почему я не должен создавать репозиторий для неагрегатного корня (за исключением, может быть, того, что затем можно будет потенциально использовать этот репозиторий, чтобы границы транзакций больше не встречались)

1 Ответ

0 голосов
/ 31 января 2019

Если ChainOfClassesA является агрегированным Root и у него есть коллекция ClassA.Если вам нужен вариант использования для обновления ClassA, вы определяете метод для объекта ChainOfClassesA.Я не вижу никакой причины для ClassA иметь ссылку на ChainOfClassesA, потому что в любом случае его можно использовать только в рамках ChainOfClassesA.Если EF позволяет вам сделать это, это не обязательно означает, что вы должны это сделать.Если вы определяете репо для ClassA, это означает, что он может полностью отделиться от своего собственного жизненного цикла.И все остальные агрегаты в конечном итоге соответствуют этому.Если вы удалите ChainOfClassesA, должен ли ClassA продолжать жить?Если да, то ClassA, вероятно, должен быть отдельным агрегатом.

...