Я новичок в DDD, и вот моя дилемма:
Я должен сохранить сущность A, которая имеет ссылку на сущность B (давайте рассмотрим, что обе являются корнями сущностей). Слой пользовательского интерфейса собирает всю эту информацию (в контроллере) через A_DTO (класс DTO для A), сопоставляет атрибуты с новым экземпляром A из DTO, теперь для ссылки на B в A пользовательский интерфейс отправляет идентификатор. Поскольку я использую ORM для репозиториев, я хотел бы найти экземпляр объекта B из BRepository, заполнить ссылку на новый экземпляр A, который мы создаем, и, наконец, вызвать ARepository.save (экземпляр A).
У меня есть несколько вариантов
- Сделайте все это на уровне пользовательского интерфейса (либо в контроллере, либо в каком-либо фасаде службы) или
- Сделайте это в ApplicationService с именем createA или даже в доменной службе.
Какой из вариантов будет правильным ?? Здесь действительно выделяется процесс поиска B по его идентификатору, чтобы получить ссылку для установки на объект A, это можно в равной степени аргументировать как процесс, обеспечивающий удовлетворение ORM или согласованность модели предметной области. В процессе установки ссылки B на A могут быть неявные бизнес-правила и проверки, которые, я думаю, являются движущими моментами для принятия решения.
Кроме того, то, что может вызвать странность в дальнейшем, здесь будет рассматриваться для проверки, если проверки будут вплетены в процесс создания объекта и скажут, что конструкторы и / или установщики через определенные ошибки, которые могут быть переданы клиенту через пользовательский интерфейс и имеют еще один уровень валидатинов через репозиторий ?? или как явный шаг, происходящий в контроллерах ??