Гравитация кода

Гравитация

Когда наблюдаешь за жизненным циклом систем, регулярно нарушающих принципы SOLID, невольно начинаешь задумываться о существовании силы, которая во многом напоминает силы гравитационного взаимодействия. Когда рост массы тела сопровождается ростом силы, с которой оно притягивает находящиеся поблизости объекты. Под действием этой силы наша планета тянет вниз подброшенные нами вверх предметы.

Что-то похожее можно наблюдать и с программным кодом. Чем больше разрастается некоторый класс, тем более косным он становится. А значит выделить из него частную зону ответственности становится все сложнее. Тогда классы, которые должны были бы зависеть только от этой ответственности или, пользуясь нашей гравитационной метафорой оказались поблизости, начинают зависеть от всего объекта. Так постепенно образуются жесткие конструкции все большего размера.

Каждый раз, когда такая конструкция притягивает к себе очередной класс, она добавляет еще одну причину притянуть следующий и так ее сила гравитации с каждым разом становится все больше и больше. Проникая в код исходного рассматриваемого класса этот процесс порождает гиганты, известные как Божественные объекты.

Если ситуацию вовремя не остановить, то может произойти то, что происходит в астрофизике со звездами высокой массы под действием сил гравитации. А именно, гравитационный коллапс с образованием сверхновых звезд. В нашем случае это чаще выражается в виде проекта, который проще полностью переделать, чем исправить. И многие из нас с такими ситуациями сталкивались.

Мы часто привыкли говорить о слабой или сильной связанности кода. В нашей физической метафоре ее можно сравнить с массой. Действительно, масса — это мера инертности тела или его готовности к быстрому движению при воздействии силы. Связанность — это мера инертности кода или готовности к быстрым модификациям под действием наших усилий.

Но мы мало заботимся о возрастающей силе пренебрежения законом Деметры. Пойдя на поводу лени и допуская на некотором участке кода сильную связанность мы предполагаем, что это временная проблема только этого участка, которую впоследствии можно решить. На самом деле — это еще одна монетка в копилку все возрастающей гравитации кода, которая с усиленным рвением начнет побуждать нас снова и снова создавать сильно связанный код. Ведь чем дальше, тем больше усилий потребуется для того, чтобы провести его рефакторинг и преодолеть эту силу.

Звезда под действием гравитации может пройти путь от облака газа до черной дыры. Хотим ли мы, чтобы наш код оказался в такой же дыре?