афферентный
Если что-то использует кучу разных вещей (большое количество афферентных связей), то может произойти поломка, если что-то из этого изменится.
Нестабильность = 1
выносящий
Если что-то используется кучей разных вещей (большое количество эфферентных связей), то это может привести к поломке многих вещей, если это изменится.
Нестабильность = 0
стабильность
Определение Мартином «стабильности» - это экзотическое сочетание «трудно изменить» и «мало причин для изменения». И все же его показатель нестабильности описывает только «сложность перемен». «Причины для изменения» будут иметь гораздо большее отношение к факторам, которые трудно вычислить, например, к правильному проектированию интерфейсов на соответствующем уровне абстракции и более четкому пониманию требований конечных пользователей.
Так что высокая эфферентная связь с низкой афферентной связью дает стабильность (как в чем-то сложном для изменения, так как это сломает кучу вещей), наоборот - нестабильность (как в чем-то, что легко изменить, так как это не сломает кучу вещей) ,
Большое количество афферентных соединений может быть показателем того, что вашему дизайну не хватает фокуса - он использует целую кучу разных вещей, поэтому, возможно, ему не хватает четкой, исключительной ответственности.
Большое количество эфферентных соединений изначально может быть истолковано как действительно хорошая вещь, поскольку это указывает на то, что ваш дизайн широко (пере) используется. Тем не менее, было бы плохо, если бы вы чувствовали искушение часто менять дизайн таким образом, чтобы все сломалось. Таким образом, с большим количеством эфферентных соединений возникает необходимость в таких пакетах, чтобы «было мало или нет причин для изменения». Конструкции должны быть стабильными в идеальном смысле, чтобы не было причин для изменений, поскольку их также будет очень сложно изменить.
Принцип стабильных абстракций
Такие понятия, как инверсия зависимостей (которая, естественно, требует внедрения зависимостей) и SAP (принцип стабильных абстракций), предполагают, что зависимости движутся к абстракциям. И есть простая причина, почему при рассмотрении «стабильности» в контексте «мало причин для изменения». В абстрактном интерфейсе не упоминаются конкретные детали, он фокусируется только на том, «что делать», а не на том, что есть, и поэтому имеет меньше причин для изменения. Ускоренный графический порт на наших материнских платах (абстрактный интерфейс) имеет меньше причин для изменения дизайна, чем графический процессор, который подключается к нему (конкретная деталь).
Повторное использование против повторного использования
Моим собственным показателем, если я могу предложить тот, который несколько противоречит принципам Мартина, является то, что мне нравится выдвигать идею о том, что наиболее повторно используемые библиотеки должны стремиться к минимальному повторному использованию другого кода. Это толкает нестабильность к жесткому нулю. Это по практическим причинам минимальных причин для изменения, а также для продвижения самой простой библиотеки для развертывания. Универсальная, широко используемая библиотека, которая зависит от дюжины разных библиотек, имеет множество причин для изменения, а также неуклюжий дистрибутив, который может быть сложным для развертывания. Разница здесь в том, что «причины для изменения» в моем случае распространяются даже на реализацию, поскольку она исходит из ориентированного на библиотеку представления, которое стремится выпустить стабильные версии библиотеки. Мартин может обесценить реализацию как отдельную часть,
С точки зрения распространения, реализация и интерфейс размываются, чтобы привести пользовательские зависимости в стабильную или нестабильную библиотеку. С точки зрения интерфейса используется только интерфейс, и связанные с ним детали реализации полностью отделены.