Как управлять связанностью в проекте? Пост 2 из 8
Связанность - это когда изменение одного места тянет за собой половину проекта. Тянете за один провод наушников - выезжает весь клубок. В коде то же самое. Хорошая связанность живёт внутри одной задачи. Плохая - по всему приложению и ещё прячется.
Три главных виновника:
Связанность знания Правило живёт в десяти разных местах. Меняешь статус заказа - проверяешь в 15 местах. Лучше правило держать в одном месте.
Связанность через общее Два модуля не вызывают друг друга напрямую, но оба пишут в одну таблицу. Поменял колонку — сломалась касса. Самая опасная связанность.
Связанность во времени Один объект делает три разных действия, которые должны идти вместе. Забыл порядок - баг. Лучше делать одно действие.
Как управлять связанностью:
Делай зависимости видимыми (в конструкторе). Связывай с тем, что редко меняется (контракты, интерфейсы). Не пускай модули друг к другу в гости. Держи вместе то, что меняется вместе.
Простая проверка: Могу ли я заранее назвать, какие части проекта затронет изменение? Понимаю ли я, почему один класс знает про другой?
Если вынуть модуль, отвалится ли только то, что ожидал? Если ответы «ну посмотрим», связанность уже управляет проектом.
Главное
Управлять связанностью - значит решать, кто имеет право знать о ком.
Правка письма не должна будить платежи.
Полный пост с примерами, кодом и практическими советами - в телеграмм https://t.me/retro_s_pristrastiem
На следующей неделе - как находить границы модулей. Хорошей недели 🙂