afferente
Se qualcosa usa un sacco di cose diverse (alto numero di accoppiamenti afferenti), allora potrebbe essere incline a rompersi se una di queste cose cambia.
Instabilità = 1
efferente
Se qualcosa viene utilizzato da un sacco di cose diverse (elevato numero di accoppiamenti efferenti), allora potrebbe essere incline a rompere un sacco di cose se cambia.
Instabilità = 0
Stabilità
La definizione di "stabilità" di Martin è una miscela esotica tra "difficile da cambiare" e "avere poche ragioni per cambiare". Tuttavia la sua metrica di instabilità descrive solo "difficoltà di cambiamento". I "motivi per cambiare" avranno molto più a che fare con fattori che non possono essere facilmente calcolati, come la semplice progettazione delle interfacce in modo appropriato, a un livello adeguato di astrazione e la comprensione più chiara dei requisiti dell'utente finale.
Quindi un accoppiamento efferente elevato con un accoppiamento afferente basso fornisce stabilità (come in qualcosa di difficile da cambiare poiché romperà un mucchio di cose), il contrario produce instabilità (come in qualcosa di facile da cambiare poiché non romperà un mucchio di roba) .
Un gran numero di accoppiamenti afferenti potrebbe essere un indicatore del fatto che il tuo progetto non è focalizzato - sta usando un sacco di cose diverse, quindi forse manca di una responsabilità chiara e singolare.
Un gran numero di accoppiamenti efferenti potrebbe inizialmente essere interpretato come una cosa davvero buona, in quanto indica che il tuo progetto viene ampiamente riutilizzato. Eppure sarebbe male se ti senti tentato di cambiare il design spesso in modo da rompere tutto. Quindi con un gran numero di accoppiamenti efferenti arriva la necessità che tali pacchetti abbiano "poche o nessuna ragione per cambiare". I progetti dovrebbero essere stabili nel senso ideale di non avere ragioni per cambiare, poiché allo stesso modo saranno molto difficili da cambiare.
Principio di astrazioni stabili
Concetti come l'inversione delle dipendenze (che naturalmente richiede l'iniezione delle dipendenze) e SAP (principio delle astrazioni stabili) suggeriscono che le dipendenze fluiscono verso le astrazioni. E c'è una semplice ragione per cui quando si considera la "stabilità" nel contesto di "poche ragioni per cambiare". Un'interfaccia astratta non menziona dettagli concreti, si concentra solo su "cosa fare" invece di "cosa sono le cose" e quindi ha meno ragioni per cambiare. La porta grafica accelerata sulle nostre schede madri (interfaccia astratta) ha meno motivi per subire una modifica di progettazione rispetto alla GPU che si inserisce (un dettaglio concreto).
Riutilizzabilità vs. riutilizzo
Un mio tipo personale di metrica se posso suggerirne uno che si scontra in qualche modo con quello di Martin è questa idea che mi piace spingere che le biblioteche più riutilizzabili dovrebbero cercare di riutilizzare minimamente altri codici. Ciò spinge l'instabilità verso un livello 0. È per ragioni pratiche di avere ragioni minime per cambiare, ma anche per promuovere la libreria più semplice da distribuire. Una libreria per scopi generici e ampiamente utilizzata che dipende da una dozzina di librerie diverse ha molte ragioni per cambiare, così come una distribuzione raggruppata in modo scomodo che può essere difficile da distribuire. La differenza qui è che i "motivi per cambiare" nel mio caso si estendono anche all'implementazione, poiché proviene da una visione orientata alla libreria che cerca di rilasciare versioni stabili della libreria. Martin potrebbe scartare l'implementazione come parte molto separata,
Dal punto di vista della distribuzione, l'implementazione e l'interfaccia si confondono per produrre dipendenze dell'utente in una libreria stabile o instabile. Dal punto di vista dell'interfaccia, viene utilizzata solo l'interfaccia e i dettagli di implementazione associati sono completamente separati.