Аферентні
Якщо щось використовує купу різних речей (велика кількість афектних муфт), то, якщо будь-яка з цих речей зміниться, вона може бути схильною до розриву.
Нестабільність = 1
Різні
Якщо щось застосовується купою різних матеріалів (велика кількість еферентних з’єднань), то це може схильно зламати багато речей, якщо це зміниться.
Нестабільність = 0
Стабільність
Визначення Мартіна "стабільність" - це екзотична суміш між "важко змінити" та "мало причин для зміни". Проте його метрика нестабільності лише описує "труднощі змін". "Причини зміни" матимуть набагато більше спільного з факторами, які неможливо легко обчислити, як-от просто спроектувати свої інтерфейси належним чином, на відповідному рівні абстрагування та більш чітко розуміти вимоги до кінця користувачів.
Настільки висока еферентна муфта з низькою аферентною муфтою дає стабільність (як у чомусь важко змінити, оскільки вона зламає купу речей), навпаки призводить до нестабільності (як у чомусь легко змінити, оскільки вона не зламає купу речей) .
Велика кількість аферентних муфт може бути показником того, що у вашому дизайні не вистачає уваги - він використовує цілу купу різних речей, тому, можливо, йому не вистачає чіткої, єдиної відповідальності.
Велика кількість еферентних муфт спочатку можна інтерпретувати як дійсно хорошу річ, оскільки це вказує на те, що ваша конструкція широко (повторно) використовується. Але це було б погано, якщо ви відчуваєте спокусу часто змінювати дизайн таким чином, що все порушує. Так що при великій кількості еферентних з'єднань виникає необхідність у таких пакетах мати "мало причин для зміни" або взагалі немає ". Конструкції повинні бути стійкими в ідеальному розумінні, не мати причин для зміни, оскільки їх також буде дуже важко змінити.
Принцип стійких абстракцій
Такі поняття, як інверсія залежності (що, природно, вимагає введення залежності) та SAP (принцип стійких абстракцій), все це дозволяє припустити, що залежності переходять до абстракцій. І є проста причина, чому при розгляді "стабільності" в контексті "мало причин для зміни". Абстрактний інтерфейс не зазначає жодних конкретних деталей, він фокусується лише на тому, «що робити», а не на «те, що є», і, таким чином, є менше причин для зміни. Прискорений графічний порт на наших материнських платах (абстрактний інтерфейс) має менше причин зазнати зміни дизайну, ніж графічний процесор, який підключається до нього (конкретна деталь).
Повторність використання та повторне використання
Моя власна особиста метрика, якщо я можу запропонувати ту, яка дещо стикається з Мартиновою, це таке поняття, яке я хотів би наполягати на тому, що найбільш багаторазові бібліотеки повинні прагнути мінімально повторно використовувати інший код. Це підштовхує нестабільність до важких 0. Це з практичних причин, що мають мінімальні причини для зміни, а також для просування найпростішої бібліотеки для розгортання. Бібліотека із загальним призначенням, що широко використовується, що залежить від десятка різних бібліотек, має безліч причин для зміни, а також незрозуміло розповсюджений розподіл, який може бути важким для розгортання. Різниця тут полягає в тому, що в моєму випадку "причини зміни" поширюються навіть на реалізацію, оскільки це виходить із зору, орієнтованого на бібліотеку, яка прагне випустити стабільні версії бібліотеки. Мартін може знизити реалізацію як окрему частину,
З точки зору розповсюдження, реалізація та інтерфейс розмиваються разом, щоб отримати залежність користувачів до стабільної чи нестабільної бібліотеки. З точки зору інтерфейсу, використовується тільки інтерфейс, а деталі щодо реалізації - повністю окремі.