Расположение ViewModel при выполнении CQRS

Предположим, у вас есть многоуровневый проект, разделенный на уровень презентации, бизнес-уровень и уровень доступа к данным. Если бы вы использовали CQRS, вы бы выполняли запросы непосредственно с уровня доступа к данным на уровень представления, минуя бизнес-уровень.

В этом случае, если вы используете ViewModels на уровне представления, тогда вашему уровню доступа к данным потребуется ссылка на уровень представления для возврата данных в терминах ViewModels на уровне представления. Разве это не было бы антипаттерном?

Аналогичный вопрос существует здесь - Модели, ViewModels, DTO в приложении MVC 3

Но если вы выполняете CQRS, вы не будете сопоставлять свою модель просмотра и объект домена, как указано в ответе, поскольку вы обходите свой уровень домена / бизнеса. Тогда где вы должны разместить свои модели просмотра?


person devanalyst    schedule 13.07.2012    source источник
comment
Я новичок в CQRS, но я бы сказал, что все команды и запросы должны вызываться из модели, не так ли?   -  person Steve B    schedule 13.07.2012
comment
Да, слои действительно можно считать антипаттерном. CQRS может помочь избавиться от слоев, он же программное обеспечение лазаньи (в отличие от программного обеспечения спагетти). Ознакомьтесь с некоторыми альтернативными концепциями, такими как гексагональная архитектура или шаблон «Порты и адаптеры».   -  person Dennis Traub    schedule 13.07.2012
comment
@SteveB, см. ссылку   -  person devanalyst    schedule 13.07.2012


Ответы (1)


Насколько я понимаю CQRS, вы получите DTO (DataTransferObjects) со стороны запроса (также известный как DataAccessLayer), который передается в пользовательский интерфейс (PresentationLayer).

Эти DTO можно напрямую использовать как ViewModels для View, если они предоставляют все необходимые данные для View, или могут быть агрегированы с другими DTO в ViewModel. Я думаю, это зависит от данных, представленных в View.

Чтобы ответить на ваш вопрос: ViewModels являются частью PresentationLayer.

person Jehof    schedule 13.07.2012