Соглашения об именах CQRS - PullRequest
9 голосов
/ 11 августа 2011

Я внедряю новый веб-сервис, и хотя я еще не использую CQRS, я хотел бы создать свой сервис, чтобы в будущем его можно было легко перевести на CQRS.Итак, меня интересует соглашение об именах для моих классов DTO, а также моих методов.

Я прочитал это сообщение в блоге об соглашениях об именах DTO, и мне это кажется разумным.Он предлагает следующее ...

  • SomeSortOfQueryResult
  • SomeSortOfQueryParameter
  • SomeSortOfCommand
  • SomeSortOfConfigItem
  • 1017 *1015* Some7ort6Specification* SomeSortOfRow
  • SomeSortOfItem (для коллекции)
  • SomeSortOfEvent
  • SomeSortOfElement
  • SomeSortOfMessage

Что я здесь спрашиваюВот как я должен назвать свои методы.Является ли хорошей практикой использование GetSomething или SomeQuery будет лучше?

Ответы [ 2 ]

11 голосов
/ 11 августа 2011

Именование должно действительно исходить из того, что делает метод.Сделайте шаг назад и сначала посмотрите на Разделение команд-запросов (CQS) .То, что вы действительно пытаетесь сделать здесь, это убедиться, что любой данный метод либо запрашивает данные, либо указывает, что что-то происходит.

Т.е. "Запрашивать значение не следуетизменить значение ".

CQRS - это нечто иное, в большем масштабе и, как правило, менее понятное.Однако это не обязательно сложно, просто применяя концепцию CQS на уровне архитектуры, а не на уровне кода.Например, вы можете выбрать WCF для команд и необработанный SQL для запросов.Он направлен на то, чтобы дать вам свободу сделать ваши запросы максимально простыми, которые могли бы работать, в то время как ваши команды все еще получают богатство полной доменной модели или другой подходящей реализации для ваших бизнес-правил.

CQRS также направляет васот приложения CRUD до приложения, основанного на задачах, где вы сосредотачиваетесь больше на проблемной области с точки зрения взаимодействия с пользователем, чем просто чтения и сохранения данных.

Запросы

Как правило, я называю "запросы"вариации FindXYZ(), GetXYZ() или LoadXYZ, при условии, что цель ясна (то есть возвращает некоторые данные, не изменяет any).

Команды

Обычно называть команды сложнее, хотя вы можете думать так же, как в соглашениях по именованию командлетов PowerShell - verb-noun.Лично я склонен реализовывать команды в виде шаблона CommandProcessor, где команды на самом деле являются объектами, содержащими параметры (иногда только первичный ключ объекта).Существует код для поиска соответствующих «процессоров» для каждой команды Type.Как правило, в CQRS вы пытаетесь поддерживать это синхронно, потому что асинхронность означает, что вам нужно проделать большую работу по обработке команд, которые не удалось обработать, но если вам действительно нужна команда для асинхронности, то обработчик вашей команды может отправитьсообщение для ESB, чтобы сделать это.

0 голосов
/ 11 августа 2011

Разговор о DTO в контексте CQRS звонит мне в тревогу, когда вы конкретно говорите о стороне запроса. Цитирую эту статью в блоге

шаблон DTO (Data Transfer Object) был изначально создан для сериализации и передачи объектов

Архитектура CQRS подразумевает для меня тонкую сторону запросов, т. Е. У вас не много слоев, где вам нужно перемещать информацию между ними с помощью сериализованных объектов или DTO. Возможно, вы используете термин DTO в другом смысле.

Это на самом деле не отвечает на ваш вопрос, но я хотел указать на это.

...