🖥
Как применить 𝗖𝗤𝗥𝗦 𝗽𝗮𝘁𝘁𝗲𝗿𝗻 в своей системе?CQRS — это разделение ответственности за команды и запросы, шаблон, который разделяет операции чтения и обновления для хранилища данных. Внедрив в приложение CQRS, можно максимально увеличить его производительность, масштабируемость и защиту.
Вот мой подход к его реализации.Я предпочитаю использовать
MediatR - но эта идея прекрасно работает и без него.
MediatR реализует паттерн посредника. Он отделяет внутрипроцессную отправку сообщений от их обработки.
Я расширяю интерфейс
MediatR IRequest пользовательской абстракцией
ICommand и IQuery.
Это позволяет мне явно определять команды и запросы в системе.На стороне записи:- Отправка команды из API с помощью MediatR.
- Богатая доменная модель инкапсулирует бизнес-логику
- EF Core загружает доменные сущности
- Выполнение бизнес-логики
- Сохранить изменения
На стороне чтения:- Отправка запроса из API с помощью MediatR
- Как можно меньше непрямых связей
- Dapper с необработанными SQL-запросами
- SQL представления и запросы к ним
- EF Core запросы с проекциями
Такое логическое разделение решает специфические требования к чтению и записи.
При обновлении данных мы хотим реализовать сложную бизнес-логику и валидацию.
При чтении данных мы хотим получить результат как можно быстрее.
Это стандарт в моих проектах.
Но вы можете адаптировать этот паттерн по своему вкусу.
📌
Почитать подробнее:
https://www.milanjovanovic.tech/blog/cqrs-pattern-with-mediatr@csharp_ci