CQRS + MediatR: зачем я вообще полез в это на практике? 🤔
Когда писал backend-систему управления проектами на производственной практике, решил попробовать CQRS и MediatR.
Честно говоря, изначально причина была довольно простая - мне стало интересно. Знакомый после стажировки рассказывал про Vertical Slice Architecture, MediatR и то, как удобно работать, когда логика не размазана по сервисам и слоям. Захотелось самому разобраться, что это такое и зачем нужно.
Проблема была в том, что я вообще не понимал, как правильно это использовать.
Особенно когда начал работать с агрегатом Project и собственной FSM. Для меня это был настоящий дремучий лес: много состояний, переходов и бизнес-правил. Поэтому двигался постепенно - писал код, читал статьи, переделывал решения и пытался понять, почему многие используют этот подход.
В итоге получилось примерно так: - 22 Commands - 8 Queries - Отдельные Handler’ы для каждой операции
Самое приятное ощущение было при работе с контроллерами.
Вместо контроллеров на сотни строк получались небольшие методы, которые просто отправляют команду через MediatR: await _mediator.Send(command);
А вся логика лежит рядом с предметной областью. Например, всё, что связано с проектами, находится в одном месте: 📂 Features/Projects
Когда работаешь с FSM и сложными бизнес-правилами, это оказалось намного удобнее, чем искать код по разным сервисам и слоям.
Но были и сложности. Больше всего меня удивило, что нет какого-то единственного правильного способа организовать структуру проекта. Каждый показывает свою версию CQRS, свою структуру папок и свои правила.
С одной стороны — гибкость.
С другой — новичку сложно понять, что действительно важно, а что просто предпочтения конкретной команды.
Если бы сегодня начинал этот проект заново, сначала бы задал себе вопрос: “А точно ли здесь нужен CQRS?” Для такого проекта можно было обойтись и без него.
Но ни разу не пожалел, что попробовал этот подход. Благодаря практике стало намного понятнее, какие задачи он решает и почему его используют в реальных проектах.
Сейчас хочется глубже разобраться в теме, посмотреть доклады и почитать больше материалов, потому что после первого знакомства вопросов стало только больше 🙂
А у вас был опыт с CQRS и MediatR? В какой момент вы поняли, что их действительно стоит использовать, а когда это уже лишнее усложнение?