Какие названия моделей должны иметь префикс - PullRequest
0 голосов
/ 17 июня 2019

У меня проблема с именами моих типов, обычно это относится ко всем моим проектам.

Я работаю с CQRS, и много раз у меня были разные уровни моего приложения, которые ссылаются на похожие«контекст» данных.Например, у меня есть контекст проигрывателя, который распределен по модели запросов, модели записи, модели предметной области и т. Д.

В основном мой вопрос заключается в том, что если какой-либо класс / структура / тип данных относится именно к типу «запрос»,я называю его PlayerQuery или QueryPlayer.

Насколько я понимаю, «PlayerQuery» подразумевает, что это запрос данных игрока, с другой стороны, «QueryPlayer» подразумевает какое-то поведение «Query».

Прошло довольно много времени, когда я начал кодировать, но я все еще борюсь с должным наименованием вещей.

Такое ощущение, что здесь лучше использовать PlayerQuery.Есть ли книги или онлайн-ресурсы, где я мог бы заняться этим вопросом?Большое спасибо

1 Ответ

1 голос
/ 24 июня 2019

Прошло довольно много времени, когда я начал кодировать, но я все еще борюсь с правильными именами.

Отличная цитата, которая уместна здесь ?:

В информатике есть только две сложные вещи: аннулирование кэша и называть вещи.

- Фил Карлтон

У вас возникла эта проблема, потому что вы пытаетесь подойти к проблеме с CRUD мышлением, тогда как CQRS (или CQS) рекомендует сосредоточиться на реальном взаимодействии. Даже когда разные части приложения совместно используют контекст проигрывателя, причина его использования будет разной.

В качестве примеров вы будете:

  • Запрос списка игроков на нумерацию страниц
  • Запрос детализации для одного игрока
  • Сохранение данных отдельного игрока
  • Массовое обновление атрибута в информации о нескольких игроках

В каждом из этих взаимодействий вы должны использовать само взаимодействие в качестве подсказки для имени объекта Query / Command / DTO.

Таким образом, имена классов данных могут быть:

  • PlayersList
  • PlayerDetailForQuery
  • PlayerDetailForSave
  • PlayerDetailsForBulkUpdate

Улучшение будет заключаться в добавлении суффикса каждого имени класса к типу объекта:

  • PlayersList Params
  • PlayersList Результат
  • Игрок Строка (или) Игрок Предмет (или) Игрок Деталь
  • Игрок Событие
  • Игрок Спецификация

Лучшая реализация - объединить взаимодействие с типом объекта:

  • FetchPlayerList Params
  • FetchPlayerList Результат
  • GetPlayer Деталь
  • BulkUpdatePlayer Params
  • SavePlayer Команда
  • PlayerSaved Событие

Самое важное, если вы выберете соглашение (например, Деталь вместо Элемент или Строка ), используйте его на протяжении всего код.

...