Я понимаю вашу проблему, я думаю, давайте начнем с начала:
... Поместите GetAllParent (), GetAllEntities (parentId) и GetEntity (id) все в MyViewApplicationService ...
Какое из этих слов поймет деловой человек?Являются ли какие-либо из этих слов частью вездесущего языка?
Они, конечно, все чисто технические, поэтому должны быть подробными и не должны влиять на архитектуру.По сути, они находятся не в том месте, их вообще не должно быть видно.
... но DTO ориентированы на предметную область, в некотором роде.Таким образом, DTO не оптимизированы ...
DTO не должны быть частью чего-либо удаленно объектно-ориентированного.Однако вы не сказали, что хотите объектную ориентацию, поэтому не будем останавливаться на этом.
Тем не менее, если предполагается, что ваш объект ориентирован на домен, то почему он непригоден (не оптимизирован) для приложения, котороенаписано специально для этого домена?
Я думаю, проблема в том, что ваш "объект" фактически моделирует что-то отличное от домена.Вероятно, это моделирование таблицы базы данных или ее записей.
Я имею в виду, если вы показываете профиль для продукта, тогда ваш "объект" должен быть ProductProfile
, а не универсальный Product
.Или ProductDetails
, или ProductHeroImage
, и так далее. Эти вещи из домена и, вероятно, также упомянуты в документе с требованиями.
Позволить контроллеру сопоставить DTO, который соответствует потребностям вида, но это не должно делать это.
Почему бы не сделать это?Если цель вашей функции - показать пользователю некоторые данные, то почему это не считается «бизнес-функцией».Я имею в виду, что это должно быть буквально наоборот.«Представление» - это бизнес-функция, которую вы хотите, и база данных / хранилище / контроллер / служба или любая другая «просто» технология, которая должна быть просто деталью и невидима в архитектуре.
Отказ от ответственности: Я должен признать, что эти взгляды не являются тем, что большинство проектов делают в DDD, но, возможно, вы найдете в этом какой-то смысл подвергать сомнению эти проекты в будущем .:)