Saltar a contenido

Stable Dependencies

Este principio se refiere a la idea de que los módulos de un sistema de software deben depender de módulos que sean más estables que ellos mismos.

La estabilidad de un módulo se define en función de la cantidad de cambios que ha sufrido en el pasado. Si un módulo ha sufrido pocos cambios, se considera que es más estable que otro módulo que ha sufrido muchos cambios. Por otro lado, la estabilidad de un módulo también se ve afectada por la cantidad de módulos que dependen de él. Si un módulo es dependido por muchos otros módulos, se considera que es menos estable que otro módulo que es dependido por pocos módulos.

El principio de "Stable Dependencies" sugiere que los módulos más estables deben ser independientes de los módulos menos estables. De esta manera, se evita que los cambios en los módulos menos estables afecten a los módulos más estables. Por otro lado, los módulos menos estables deben depender de los módulos más estables. De esta manera, se asegura que los módulos más estables sean menos propensos a cambiar, lo que puede mejorar la estabilidad del sistema en su conjunto.

En resumen, el principio de "Stable Dependencies" se refiere a la idea de que los módulos de un sistema de software deben depender de módulos que sean más estables que ellos mismos. Esto puede mejorar la estabilidad del sistema y reducir el impacto de los cambios en los módulos menos estables.

Recomendaciones

Para aplicar el principio de "Stable Dependencies" en el diseño de un sistema de software, se deben seguir las siguientes recomendaciones:

  1. Identificar los módulos críticos: En primer lugar, es importante identificar los módulos críticos o de alta importancia en el sistema. Estos módulos deben ser estables y no depender de otros módulos menos estables.

  2. Establecer dependencias en función de la estabilidad: Una vez que se han identificado los módulos críticos, se deben establecer dependencias con otros módulos en función de su estabilidad. Los módulos más estables deben ser independientes de los módulos menos estables, mientras que los módulos menos estables deben depender de los módulos más estables.

  3. Reducir el acoplamiento: Es importante reducir el acoplamiento entre los módulos del sistema. Esto se puede lograr mediante la identificación de las dependencias entre los módulos y la eliminación de aquellas que no son necesarias.

  4. Refactorizar el código: Si se identifican dependencias ciclicas o una gran cantidad de dependencias, puede ser necesario refactorizar el código para lograr una mejor organización y cumplir con el principio de "Stable Dependencies".

  5. Monitorear y ajustar: Es importante monitorear la estabilidad de los módulos a lo largo del tiempo y ajustar las dependencias si es necesario. Esto garantiza que los módulos más estables sigan siendo independientes y que los módulos menos estables sigan dependiendo de los más estables.

En resumen, para aplicar el principio de "Stable Dependencies" es necesario identificar los módulos críticos y establecer dependencias en función de su estabilidad, reducir el acoplamiento, refactorizar el código si es necesario, y monitorear y ajustar las dependencias a lo largo del tiempo.

¿Cómo aplicar el principio?

Para ilustrar el principio de "Stable Dependencies" en Java y Maven, supongamos que tenemos una aplicación de comercio electrónico que consta de varios módulos, incluyendo un módulo de pedidos, un módulo de inventario y un módulo de facturación. Asumimos que el módulo de pedidos es el más crítico para el negocio y, por lo tanto, debe ser el más estable.

Para aplicar el principio de "Stable Dependencies", debemos diseñar los módulos de manera que los módulos menos estables dependan de los módulos más estables. Por lo tanto, el módulo de inventario y el módulo de facturación deben depender del módulo de pedidos.

A continuación, se muestra una representación en código de cómo se puede aplicar el principio de "Stable Dependencies" en Java y Maven:

// En el archivo pom.xml del módulo de inventario
<dependencies>
  <dependency>
    <groupId>com.example</groupId>
    <artifactId>pedidos</artifactId>
    <version>1.0.0</version>
  </dependency>
</dependencies>

// En el archivo pom.xml del módulo de facturación
<dependencies>
  <dependency>
    <groupId>com.example</groupId>
    <artifactId>pedidos</artifactId>
    <version>1.0.0</version>
  </dependency>
</dependencies>

// En el archivo pom.xml del módulo de pedidos
<dependencies>
  // Dependencias del módulo de pedidos
</dependencies>
Como se puede observar, los módulos de inventario y facturación dependen del módulo de pedidos, que es el más estable. De esta manera, se garantiza que los módulos menos estables dependan de los módulos más estables y se cumple con el principio de "Stable Dependencies". Además, en caso de que se realicen cambios en el módulo de pedidos, se minimiza el impacto en los otros módulos que dependen de él.

Ejemplo

A continuación, se presenta una ilustración en Mermaid del principio "Stable Dependencies":

graph TD;
  A[Pedidos]-->|Depends on| B((Inventario));
  A-->|Depends on| C((Facturación));
En la ilustración, el módulo de Pedidos (A) es el más estable y los módulos de Inventario (B) y Facturación (C) dependen de él. Esto se representa mediante las flechas que van desde el módulo de Pedidos hacia los módulos de Inventario y Facturación. La dirección de las flechas representa la dependencia y se cumple con el principio de "Stable Dependencies".