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

@fan-in:Количество входящих зависимостей

Количество классов вне компонента, которые зависят от классов внутри компонента. Можно рассматривать, как количество классов, которые зависят от текущего.


@fan-out:Количество исходящих зависимостей

Количество классов вне компонента, от которых зависят классы внутри компонента. Можно рассматривать как количество классов, от которых зависит текущий класс.


@instability:Неустойчивость

Это отношение I = Fan-out / (Fan-in + Fan-out). Значение = 0 говорит о максимальной устойчивости компонента или класса.

когда метрика I равна 0, это означает, что от компонента зависят другие компоненты (Fan-in > 0), но сам он не зависит от других компонентов (Fan-out = 0). Такой компонент ответствен и независим. Он занимает максимально устойчивое положение. Зависимости от него усложняют изменение компонента, а отсутствие компонентов, от которых он зависит, означает отсутствие сил, которые могли бы заставить его измениться.

Если метрика I равна 1, это означает, что никакой другой компонент не зависит от данного компонента (Fan-in = 0) и данный компонент зависит от других компонентов (Fan-out > 0). Это признак неустойчивости компонента; он безответствен и зависим. Отсутствие зависящих компонентов означает, что он не может служить причиной изменения других компонентов, а его собственная зависимость может послужить веским основанием для изменения самого компонента.


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