Тема дня №26 по программной инженерии
Примечание. Первоначально это было написано и опубликовано во внутреннем Slack Armakuni Томом Орамом.
Connascence — это метрика качества программного обеспечения и таксономия для различных типов связи. Мы можем использовать его для информирования наших решений о том, как и где уменьшить связанность в наших системах.
Сознание обладает тремя свойствами:
- Сила
- Местность
- Уровень
Каждый тип коннасценции имеет разную силу, менее сильные вызывают меньше проблем. Локальность — это то, находятся ли связанные объекты рядом друг с другом (например, в одном классе или модуле) или далеко друг от друга (например, разные модули, библиотеки или службы). Степень - это то, как много вещей соединено вместе. Эти показатели следует рассматривать вместе; то есть что-то с высокой силой сцепления может быть неплохим, если оно очень локально и имеет низкую степень.
Существует две категории коннесценных типов: динамические и статические. Статические типы можно обнаружить, проверив код, динамические требуют знания среды выполнения. Типы, в порядке прочности от низкого к высокому:
Статический
- Имя — вещи связаны, если вы должны ссылаться на одно и то же имя (например, имя функции).
- Тип — вещи связаны, когда нужно согласовать тип
- Значение — вещи связаны, когда определенные значения имеют особое значение (например, ноль означает, что не найдено).
- Позиция — вещи связаны, когда позиция (в списке или наборе параметров) имеет особое значение.
- Алгоритм — вещи связаны, когда они оба должны понимать один и тот же алгоритм (например, функции шифрования и дешифрования).
Динамический
- Порядок выполнения — вещи связаны, когда ряд действий должен вызываться в определенном порядке.
- Время — вещи связаны, когда порядок имеет значение в соответствии со временем (например, условия гонки).
- Значение — вещи связаны, когда два или более значения зависят друг от друга.
- Идентификация — элементы объединяются, когда необходимо использовать конкретный экземпляр чего-либо.
- Ручная задача — вещи связываются, когда происходит ручное связывание вручную.
Connascence дает нам конкретную метрику для уменьшения связи в нашем коде. Когда вы определяете тип связи, вы можете подумать о том, как ее уменьшить (это особенно полезно, когда вы определяете динамические типы связи).
Дополнительные примеры см. на https://connascence.io/
Q1. Какие типы совпадения могут быть обнаружены компилятором в языках со статической типизацией?
Вопрос 2. Можете ли вы привести пример того, как перейти от одного типа сочувствия к другому?