Казалось бы, про CQRS всё уже давно сказано — но мне есть что добавить!
Если спросить backend разработчика про CQRS — конечно он скажет, что знает о таком подходе. Но если спросить о подробностях — то получим много различных вариантов и трактований.
В докладе я обобщу свой многолетний опыт применения CQRS.
Обсудим, какие варианты реализации CQRS бывают. Какие преимущества дает каждый из вариантов и какие он накладывает ограничения.
Так же обсудим самые популярные вопросы и заблуждения CQRS:
- Могут ли команды возвращать значения. Если нет — то почему?
- Могут ли query писать логи?
- Что делать, если две команды должны использовать общую логику?
- Поможет ли CQRS при росте нагрузки на сервис?
Примеры кода будут на C#, но общие принципы не зависят от конкретного языка или платформы. А для тех, кто пишет на Java/Kotlin, в конце доклада будет приятный бонус.
На мой взгляд, основная ценность для слушателей — показать, что под термином CQRS часто понимают совершенно разные реализации. И это нормально, просто важно об этом помнить.
Я покажу свой рецепт использования общей логики между разными handlers (об этом в докладах обычно ничего не говорят). Для .NET обсудим библиотеку MediatR. И её порт на java в виде PipelinR (тот редкий случай, когда либу портировали .NET -> Java, а не наоборот).