В этой великолепной книге о проектировании, ориентированном на предметную область, глава посвящена пользовательскому интерфейсу и его связи с объектами предметной области.
Один момент, который меня смущает, — это сравнение между оптимальными запросами для вариантов использования и докладчиками.
Отрывок, посвященный оптимальным запросам (стр. 517):
Вместо того, чтобы читать несколько полных экземпляров Aggregate различных типов, а затем программно объединять их в один контейнер (DTO или DPO), вы можете вместо этого использовать так называемый оптимальный запрос варианта использования.
Именно здесь вы создаете свой репозиторий с помощью finder. методов запроса, которые составляют настраиваемый объект как надмножество одного или нескольких экземпляров Aggregate.
Запрос динамически помещает результаты в объект Value (6), специально разработанный для удовлетворения потребностей варианта использования.
Вы разрабатываете Value Object, а не DTO, потому что запрос зависит от домена, а не от приложения (как и DTO). Пользовательский вариант использования оптимального объекта Value затем потребляется непосредственно визуализатором представления.
Таким образом, преимущество оптимальных запросов заключается в том, что они напрямую предоставляют конкретный для представления объект значения, действующий как реальная модель представления.
На следующей странице описывается шаблон ведущего:
Модель презентации действует как адаптер. Он маскирует детали модели предметной области, предоставляя свойства и поведение, разработанные с точки зрения потребностей представления.
Вместо того, чтобы требовать, чтобы модель предметной области специально поддерживала необходимые свойства представления, за это отвечает модель представления. для получения индикаторов и свойств, относящихся к представлению, из состояния модели предметной области.
Похоже, что оба способа достигают построения модели представления, специфичной для варианта использования.
В настоящее время моя цепочка вызовов (с использованием Play Framework) выглядит так:
Для запросов: Контроллеры (действующие как интерфейс Rest, отправляющий Json) -> Запросы (возвращающие объект определенного значения через оптимальные запросы)
Для команд: Контроллеры (действующие как интерфейс Rest, отправляющий Json) -> Службы приложений (Команды) -> Службы домена/репозитории/агрегаты (службы приложений возвращают пустоту)
У меня вопрос: если я уже практикую оптимальный запрос варианта использования, какая польза от реализации шаблона докладчика? Зачем возиться с докладчиком, если всегда можно использовать оптимальные запросы для непосредственного удовлетворения потребностей клиента?
Я просто думаю об одном преимуществе шаблона презентатора: работа с командами, а не с запросами, что позволяет управлять некоторыми объектами предметной области, соответствующими моделям представления, определенным презентером. Затем контроллер будет отделен от объекта домена. Действительно, другой отрывок из описания Presenter:
Кроме того, редактирование, выполненное пользователем, отслеживается моделью представления.
Это не тот случай, когда перегруженные обязанности возлагаются на модель представления, поскольку она предназначена для адаптации в обоих направлениях: модель для представления и представление для модели.
Однако я предпочитаю отправлять чистые примитивы в службы приложений (команды), а не работать напрямую с объектами домена, поэтому это преимущество для меня неприменимо.
Есть объяснение?