Это продолжение другого вопроса: Обход совокупного корня.
Автор этого вопроса спросил, допустимо ли в его примере обход совокупного корня. У меня тот же вопрос, но для другого варианта использования.
В нашем веб-приложении есть бэк-офис, в котором мы можем редактировать все элементы, принадлежащие общему корню:
- Продукты (совокупный корень)
- Опции
- Дополнительные элементы
и т.п.
Поскольку продукт не создается со всеми его опциями в пакете, мы редактируем каждую сущность в общем корне, одну за другой, на отдельном экране. Поскольку мы находимся в системе без сохранения состояния, нам необходимо однозначно идентифицировать объект, над которым мы хотим работать, в параметрах URL. Это означает, что мы будем, например, извлекать и редактировать параметр на основе его id
, а не просматривать из корня.
ИМХО, имеет смысл иметь репозиторий для каждого из них, и просто делать:
$optionRepository->find($optionId);
Вместо чего-то вроде:
foreach ($product->options as $option) {
if ($option->id == $optionId) {
// ok, we finally found it, we can now work on it
// ...
break;
}
}
Разрушает ли это концепцию совокупных корней из доменно-ориентированного дизайна? В таком случае я был бы очень признателен, если бы узнал, как это сделать правильно.