Команды CQRS как модели для действий POST - PullRequest
1 голос
/ 22 июля 2011

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

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

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

Ответы [ 3 ]

5 голосов
/ 22 июля 2011

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

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

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

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

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

3 голосов
/ 22 июля 2011

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

2 голосов
/ 22 июля 2011

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

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

...