Dependency Inversion
El principio de Inversión de Dependencias (DIP, por sus siglas en inglés) es un principio de diseño de programación que se basa en que las clases de alto nivel no deben depender de las clases de bajo nivel, sino que ambas deben depender de una abstracción común. Es decir, en lugar de que una clase dependa directamente de otra clase, ambas deben depender de una interfaz o una clase abstracta que las defina.
Ejemplos en Java:
-
Un ejemplo común es el uso de una clase Motor y una clase Automóvil. En lugar de que la clase Automóvil dependa directamente de la clase Motor, se crea una interfaz Motor y ambas clases dependen de esta interfaz. Esto permite cambiar el motor sin afectar al automóvil y viceversa.
-
Otro ejemplo es el uso de una clase Cliente y una clase Servicio. En lugar de que la clase Servicio dependa directamente de la clase Cliente, se crea una interfaz Cliente y ambas clases dependen de esta interfaz. Esto permite cambiar la implementación de Cliente sin afectar al Servicio y viceversa.
Aquí te dejo un ejemplo en Java que ilustra el uso del principio de Inversión de Dependencias. En este ejemplo se tiene una interfaz Motor, que es la interfaz principal, una clase ElectricMotor que implementa la interfaz Motor, y una clase Automobile que depende de la interfaz Motor.
interface Motor {
void start();
}
class ElectricMotor implements Motor {
public void start() {
System.out.println("Iniciando motor eléctrico");
}
}
class Automobile {
private Motor motor;
public Automobile(Motor motor) {
this.motor = motor;
}
public void start() {
motor.start();
}
}
public class Main {
public static void main(String[] args) {
ElectricMotor electricMotor = new ElectricMotor();
Automobile automobile = new Automobile(electricMotor);
automobile.start();
}
}
En este ejemplo, la clase Automobile no depende directamente de ElectricMotor, sino de la interfaz Motor. Esto permite cambiar el tipo de motor utilizado por el automóvil (por ejemplo, un motor de gasolina) sin afectar al código de la clase Automobile.
Aquí te dejo un ejemplo en Java que ilustra cómo romper el principio de Inversión de Dependencias. En este ejemplo se tiene una clase Motor y una clase Automóvil, donde la clase Automóvil depende directamente de la clase Motor.
class Motor {
public void start() {
System.out.println("Iniciando motor");
}
}
class Automobile {
private Motor motor;
public Automobile() {
this.motor = new Motor();
}
public void start() {
motor.start();
}
}
public class Main {
public static void main(String[] args) {
Automobile automobile = new Automobile();
automobile.start();
}
}
En este ejemplo, la clase Automobile depende directamente de la clase Motor. Si se quisiera cambiar el tipo de motor utilizado por el automóvil, se tendría que modificar el código de la clase Automobile, violando así el principio de Inversión de Dependencias. Es recomendable usar una interfaz para abstraer la dependencia y poder cambiar la implementación sin afectar al código de la clase Automobile
https://howtodoinjava.com/spring-core/spring-ioc-vs-di/
https://www.baeldung.com/java-dependency-inversion-principle
https://javatechonline.com/solid-principles-the-dependency-inversion-principle/