Команды CQRS как модели для действий POST

Я начал работать с CQRS и подумал, что было бы разумнее использовать объект Command в качестве модели в моих формах. Я могу воспользоваться преимуществами проверки на стороне клиента для команд с использованием DataAnnotations, проверка на стороне клиента делает его довольно чистым...

Мой вопрос... это вызывает проблемы? Если у моей команды нет конструктора по умолчанию, сделает ли этот процесс невозможным? Нужно ли мне создавать свой собственный CommandModelBinder, который может конструктор вводить агрегатный идентификатор?

Ваши мысли, я нигде не могу найти эту технику, и я предполагаю, потому что она не работает.

3 ответа

Я бы порекомендовал вам взглянуть на статью Грега Янга о пользовательском интерфейсе на основе задач о том, как DTO и сообщения взаимодействуют с вашей системой (как на стороне клиента, так и на стороне сервера).

Я согласен с Себастьяном, что ваши команды будут точно соответствовать тому, как будет выглядеть ваш пользовательский интерфейс. В результате вам, вероятно, понадобятся отдельные классы DTO/Model и команды. Это на самом деле неплохо, так как ваша Модель действительно является результатом вашей системы запросов и не должна быть точной копией сообщений, которые вы отправляете в систему.

Кроме того, если ваши команды отделены от вашей модели, ваше беспокойство о конструкторах команд исчезнет. Ваш контроллер просто собирает информацию от клиента, создает команду и затем отправляет ее.

Если вы только начинаете работать с CQRS, сайт Грега (cqrsinfo.com) довольно хорош, особенно его видео размером 6 с половиной часов. Да, это 6 с половиной часов, но это действительно отличное введение и обзор того, что такое CQRS. Это очень помогло мне.

Надеюсь это поможет!

Использование POST для отправки вашей команды в обработчики команд домена кажется разумным. Но вряд ли это будет именно тот объект, с которым вы связываете свой интерфейс. Команды в интерфейсе (например, щелчки мышью) станут командами домена (создать пользователя). Ваш графический интерфейс, скорее всего, будет привязан к результатам запроса.

По причинам, которые вы упомянули, вы создадите View View Models, которые в основном будут передаваться между клиентом и сервером. Таким образом, вы можете использовать все преимущества mvc, такие как привязка модели, аннотации данных и т. Д. В вашем контроллере вы затем создадите команду и отправите команду на служебную шину.

Я думаю, что это поможет вам немного лучше разделить проблемы, и, на мой взгляд, это будет легче проверить.

Другие вопросы по тегам