-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Description
Сейчас все команды имеют одновременно:
- Свойства, которые описывают структуру команды
- Метод ApplyOn, который хранит в себе логику обработки команды (почти всегда там просто вызов репозитория)
Я вижу в этом следующие проблемы:
- Нарушение SRP.
- Проблемы с расширяемостью. Когда для обработки команды нужно будет больше кода, чем вызов репозитория, то непонятно, куда этот код ложить - в саму команду, в сервис выше или в репозиторий.
- Смешение парадигм - команда одновременно и ДТО, и объект. Выходит, тут одновременно и структурное програмирование, и ООП.
Я предлагаю сделать команды просто как ДТО, а логику их обработки выносить в отдельные хендлеры. При этом, репозитории могут принимать саму команду в своих методах, что освободит от лишнего перекладывания параметров.
Более того - такой подход можно использовать и для query запросов. Все get запросы тоже можно оформить как дто+обработчик. Тогда высокоуровневые сервисы (каталоги) будут создавать команду или запрос и передавать их в нужный хендлер. Чтобы уменьшить связанность, можно использовать MediatR. Он будет находить подходящий обработчик для команд и запросов автоматически.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels