Как Вы представляете себе идеальное бизнес-приложение? Оно сфокусировано на бизнес-нуждах заказчика? Хорошо структурировано, легко поддерживается, надежно и устойчиво, предсказуемо и масштабируемо? Если это те ассоциации, которые возникают у Вас. когда Вы слышите слово «хороший» относительно бизнес-приложения, тогда этот доклад для Вас.
Долгие годы разработчики изобретали новые способы, чтобы сделать их приложения лучше. Овладение объектно-ориентированной парадигмой разработки, шаблонами проектирования, разработкой через тесты (test-driven development, TDD) и предметно-ориентированным проектированием (domain-driven design, DDD) были шагами на этом сложном пути. CQRS (разделение ответственности между командами и запросами, по-англ. command query responsibility segregation) – это следущий шаг.
CQRS происходит из идеи шаблона CQS (разделение команд и запросов, по-англ. command query separation): все методы должны быть либо функциями (возвращать результат выполнения и не иметь побочных эффектов) или процедурами (выполнять некоторое действие и не возвращать результата).
В подходе CQRS эта идея применяется на уровне архитектуры приложения, разделяя ее на две части: чтение и запись. Этот простой прием дает огромное пространство для оптимизации каждой из частей под ее конкретные нужды.
Статистика показывает, что для обычного бизнес-приложения операции чтения случаются намного чаще, чем операции по изменению данных. Т.к. в части чтения трансформации данных не происходит, то не опасаясь за целостность, мы можем денормализовать данные, избавившись таким образом от сложных соединений таблиц при запросах, что положительно скажется на производительности. Более того, хранилище с денормализованными данными можно легко масштабировать на несколько физических носителей, если со временем наши потребности в производительности еще вырастут. В свою очередь, часть записи должна поддерживать транзакции и содержать всю ту сложную бизнес-логику, которая приносит прибыль нашим заказчикам. Работая над частью записи, мы сфокусируемся на выполнении требований и моделировании бизнес-домена заказчика, и не будем ограничены неоптимальными хранилищами данных, которые обычно используются только потому, что нужно как-то отображать данные и строить отчеты.
В моей презентации я покажу высокоуровневую структуру приложения, построенного с использованием подхода CQRS, остановлюсь на особенностях дизайна и разработки, а также поделюсь опытом нашей команды, полученным при создании прототипа с использованием этого подхода.
Ксения Мухортова
Старший инженер-разработчик, Intel, Нижний Новгород
Ксения специализируется на автоматизации бизнес-процессов и создании корпоративных бизнес-приложений. Последние 7 лет работает в лаборатории Intel в Нижнем Новгороде где участвовала в различных проектах, как разрабатываемых с нуля, так и находящихся на поддержке. В область профессиональных интересов входят архитектура сложных программных продуктов в условиях распределенной инфрастурктуры, приемы и практики разработки качественного и легко поддерживаемого кода, командные процессы разработки, веб-технологии, юзабилити.