Другой тип изменений, который может повлиять на проектирование системы, это изменение самой организации. В главе 5 мы рассмотрели разные шаблоны интеграции ограниченных контекстов: партнерство, общее ядро, конформизм, предохранительный уровень, сервис с открытым протоколом и раздельные пути. Организационные изменения могут влиять на коммуникацию и сотрудничество между командами, а также на способы интеграции их ограниченных контекстов.
Тривиальным примером такого изменения является расширение центров разработки. Чтобы адаптироваться к развивающимся бизнес-потребностям, центры разработки растут и часто разделяются на удаленные друг от друга офисы. Давайте посмотрим, как это может повлиять на эволюцию паттернов интеграции:
От паттерна общего ядра к паттерну партнёрства
Как мы видели, паттерн общего ядра подходит для случаев, когда несколько ограниченных контекстов реализуются одной и той же командой. С ростом организации работа над этими ограниченными контекстами может быть распределена по разным командам. Если новая структура поддерживает сотрудничество между командами, имеет смысл отойти от паттерна общего ядра к паттерну партнёрства.
От паттерна партнёрства к паттерну заказчик-поставщик
Паттерн партнёрства предполагает наличие хорошей коммуникации и сотрудничества между командами. С течением времени это может измениться — например, когда работа над одним из ограниченных контекстов переносится в удаленный центр разработки. Такие изменения негативно повлияют на коммуникацию между командами и имеет смысл перейти от паттерна партнёрства к паттерну заказчик-поставщик.
От паттерна заказчик-поставщик к паттерну раздельных путей
К сожалению, не редкость, когда команды имеют серьёзные проблемы с коммуникацией. Причиной могут быть расстояние или организационная политика. Со временем такие команды могут столкнуться с большими проблемами интеграции. В какой-то момент дублирование функциональности может стать эффективнее непрерывных попыток понять друг друга.
От паттерна раздельных путей к паттернам партнёрства или заказчик-поставщик
Как вы видели ранее, команды могут идти раздельными путями в случаях работы с поддерживающими и обобщёнными предметными подобластями (с точки зрения бизнеса нет смысла в дублировании функциональности основной предметной подобласти). Ранее в этой главе вы также видели, как и поддерживающая, и обобщённая предметные подобласти могут превратиться в основную. Если функциональность эволюционировавшей предметной подобласти была продублирована несколькими командами, им придется интегрировать свои реализации. В этом случае лучше подойдет паттерн заказчик-поставщик, так как тогда основная предметная подобласть будет реализована только одной командой.