Dependency Inversion
El principio de inversión de dependencias (DIP) es el último de los cinco principios SOLID de la programación orientada a objetos. Establece que las dependencias deben ir de los módulos de alto nivel a los módulos de bajo nivel.
En otras palabras, los módulos de alto nivel no deben depender de los módulos de bajo nivel, sino de abstracciones.
Ejemplo:
public interface IRepositorioDatos {
public IEnumerable<object> ObtenerDatos();
}
public class RepositorioDatosSQL : IRepositorioDatos {
public IEnumerable<object> ObtenerDatos() {
// ...
}
}
public class RepositorioDatosJSON : IRepositorioDatos {
public IEnumerable<object> ObtenerDatos() {
// ...
}
}
public class Controlador {
private IRepositorioDatos repositorio;
public Controlador(IRepositorioDatos repositorio) {
this.repositorio = repositorio;
}
public void MostrarDatos() {
repositorio.ObtenerDatos();
}
}
En este ejemplo, el controlador no depende directamente del repositorio de datos. En su lugar, depende de la interfaz IRepositorioDatos
. Esto significa que si se desea cambiar el repositorio de datos, solo será necesario modificar el código del repositorio.
En este ejemplo, se utilizan dos clases diferentes para implementar la interfaz IRepositorioDatos
: RepositorioDatosSQL
y RepositorioDatosJSON
.
Para utilizar una de estas clases, basta con crear una instancia de la clase y pasarla al controlador. Por ejemplo, para utilizar el repositorio de datos SQL, se haría lo siguiente:
Controlador controlador = new Controlador(new RepositorioDatosSQL());
Para utilizar el repositorio de datos JSON, se haría lo siguiente:
Controlador controlador = new Controlador(new RepositorioDatosJSON());
Como se puede ver en estos ejemplos, el principio DIP puede aplicarse a cualquier tipo de código, desde clases simples hasta sistemas complejos.