теория
Смотри, сила связи из прошлых модулей отвечала на вопрос «что рвётся». Теперь добавим ось, которая отвечает «насколько это больно» — .
Дистанция — это расстояние между связанными компонентами. Два класса в одном файле — дистанция крошечная: меняешь оба в одном коммите, одним деплоем, за минуту. Два сервиса разных команд в разных репозиториях — дистанция огромная: то же самое совместное изменение теперь требует согласования, версий схем и выкаток по очереди.
И вот тут парадокс, который стоит прочувствовать. Чем больше дистанция, тем дороже согласованно менять связанные части — но тем слабее их : в одном монолите даже незнакомые модули собираются и деплоятся вместе, а разнесёшь по сервисам — каждый заживёт своим релизным циклом. Дистанция — палка о двух концах.
Отсюда всё правило умещается в одну таблицу:
| малая дистанция | большая дистанция | |
|---|---|---|
| сильная связь | когезия: одно целое, один деплой | распределённый монолит — худший угол |
| слабая связь | просто соседи, менять дёшево | чистая независимость — то, ради чего и режут |
Сильную связь держи на малой дистанции. На большую выноси только слабую. А что вообще задаёт дистанцию? Не только «в каком модуле лежит код», но и кто им владеет (как устроены команды, так система и разрежется), и как части общаются в рантайме — синхронно или асинхронно.
Одна ось у нас уже была, вторую добавили. Осталась третья — и она про время.