Aferente
Si algo usa un montón de cosas diferentes (gran cantidad de acoplamientos aferentes), entonces podría ser propenso a romperse si alguna de esas cosas cambia.
Inestabilidad = 1
Eferente
Si algo es usado por un montón de cosas diferentes (alto número de acoplamientos eferentes), entonces podría ser propenso a romper muchas cosas si cambia.
Inestabilidad = 0
Estabilidad
La definición de Martin de "estabilidad" es una mezcla exótica entre "difícil de cambiar" y "tener pocas razones para cambiar". Sin embargo, su métrica de inestabilidad solo describe la "dificultad de cambio". Las "razones para cambiar" tendrán mucho más que ver con factores que no pueden calcularse fácilmente, como diseñar sus interfaces de manera adecuada, en un nivel apropiado de abstracción y comprender los requisitos del usuario final de manera más clara por adelantado.
Entonces, un acoplamiento eferente alto con un acoplamiento aferente bajo produce estabilidad (como en algo difícil de cambiar ya que romperá un montón de cosas), lo contrario produce inestabilidad (como en algo fácil de cambiar ya que no romperá un montón de cosas) .
Una gran cantidad de acoplamientos aferentes podría ser un indicador de que su diseño carece de enfoque: está utilizando un montón de cosas diferentes, por lo que tal vez carece de una responsabilidad clara y singular.
Inicialmente, una gran cantidad de acoplamientos eferentes podría interpretarse como algo realmente bueno, ya que indica que su diseño está siendo (re) utilizado ampliamente. Sin embargo, eso sería malo si se siente tentado a cambiar el diseño a menudo de manera que lo rompa todo. Entonces, con una gran cantidad de acoplamientos eferentes surge la necesidad de que dichos paquetes tengan "pocas o ninguna razón para cambiar". Los diseños deben ser estables en el sentido ideal de no tener razones para cambiar, ya que también serán muy difíciles de cambiar.
Principio de abstracciones estables
Conceptos como inversión de dependencia (que naturalmente requiere inyección de dependencia) y SAP (principio de abstracciones estables) sugieren que las dependencias fluyen hacia las abstracciones. Y hay una razón simple para considerar la "estabilidad" en el contexto de tener "pocas razones para cambiar". Una interfaz abstracta no menciona detalles concretos, solo se centra en "qué hacer" en lugar de "qué son las cosas" y, por lo tanto, tiene menos razones para cambiar. El puerto de gráficos acelerado en nuestras placas base (interfaz abstracta) tiene menos razones para sufrir un cambio de diseño que la GPU que se conecta (un detalle concreto).
Reusabilidad vs. Reutilización
Un tipo de métrica personal mía si puedo sugerir una que colisione un poco con la de Martin es esta noción que me gusta insistir en que las bibliotecas más reutilizables deberían tratar de reutilizar mínimamente otro código. Eso empuja la inestabilidad hacia un 0 difícil. Es por razones prácticas de tener razones mínimas para cambiar, pero también para promover la biblioteca más fácil de implementar. Una biblioteca de uso general y ampliamente utilizada que depende de una docena de bibliotecas diferentes tiene muchas razones para cambiar, así como una distribución incómoda que puede ser difícil de implementar. La diferencia aquí es que las "razones para cambiar" en mi caso se extienden incluso a la implementación, ya que proviene de una vista orientada a la biblioteca que busca lanzar versiones estables de la biblioteca. Martin podría descartar la implementación como una parte muy separada,
Desde el punto de vista de la distribución, la implementación y la interfaz se difuminan juntas para generar dependencias del usuario en una biblioteca estable o inestable. Desde el punto de vista de la interfaz, solo se utiliza la interfaz y los detalles de implementación asociados están completamente separados.