Contenido del curso
Principios SOLID
- 2

Qué es el principio de responsabilidad única
05:58 min - 3

Procesador de pagos en Python con Stripe
11:13 min - 4

Cómo aplicar SRP en un procesador de pagos con Stripe
25:19 min - 5

Principio open-closed en Python
02:39 min - 6

Clases abstractas y principio abierto-cerrado
14:46 min - 7

Principio de Liskov en S.O.L.I.D.
03:18 min - 8

Principio de sustitución de Liskov en Python
06:38 min - 9

Principio de segregación de interfaces en SOLID
02:33 min - 10

Segregación de interfaces en procesadores de pagos
09:05 min - 11

Principio de inversión de dependencias en SOLID
Viendo ahora - 12

Principio de inversión de dependencias: servicio de pagos flexible
05:56 min
Reestructuración del proyecto
Patrones de Diseño
- 14

Qué son los patrones de diseño: definición y categorías
03:54 min - 15

Strategy Pattern con Python y setprocessor
01:55 min - 16

Strategy Pattern para pagos en Python
10:58 min - 17

Factory Pattern: centralizar creación de objetos
03:04 min - 18

Patrón Factory para procesar pagos con match
11:06 min - 19

Qué es el patrón Decorator
03:06 min - 20

Patrón decorador en servicios de pagos
12:57 min - 21

Builder Pattern: construcción paso a paso
01:28 min - 22

Builder Pattern aplicado a un servicio de pagos
18:54 min - 23

Observer Pattern en sistemas de eventos
01:48 min - 24

Observer en sistemas de pagos con Python
11:11 min - 25

Chain of Responsibility para validar pagos
02:04 min - 26

Chain of Responsibility en servicios de pagos
16:27 min - 27

Código funcional vs código mantenible en Python
03:19 min
Principio de inversión de dependencias en SOLID
Resumen
El principio de inversión de dependencias es la letra D de SOLID y, según muchos desarrolladores, el que más beneficios aporta al construir software mantenible. Si trabajas con código orientado a objetos y buscas reducir acoplamiento, escribir pruebas unitarias más simples y escalar tus servicios sin romperlos, este principio te interesa.
¿Qué dice el principio de inversión de dependencias?
La definición formal del dependency inversion principle establece que los módulos de alto nivel no deben depender de los módulos de bajo nivel. Ambos deben depender de abstracciones. Y las abstracciones, a su vez, no deben depender de los detalles: los detalles dependen de las abstracciones.
En la práctica, los módulos de alto nivel contienen la lógica de negocio y los módulos de bajo nivel manejan detalles específicos de implementación. La inversión consiste en que ambos miren hacia una interfaz común, no que uno dependa del otro directamente.
¿Qué es la inversión de dependencias en SOLID? Es un principio que obliga a que tanto las clases de alto nivel como las de bajo nivel dependan de interfaces o abstracciones, en lugar de que la lógica de negocio dependa de implementaciones concretas.
¿Cómo se ve en código un ejemplo claro?
Imagina un gestor de notificaciones. En lugar de instanciar directamente un servicio de email o de SMS, tiene un atributo de tipo INotificador, una interfaz con el método enviarMensaje. Los detalles de implementación viven en cada notificador concreto: uno por email y otro por SMS.
- Clase de alto nivel: el gestor de notificaciones, totalmente abstraído de los detalles.
- Clases de bajo nivel: el notificador por email y el notificador por SMS, que implementan la interfaz.
- Abstracción común: la interfaz
INotificador, que ambos lados respetan.
Así, el gestor no sabe ni le importa cómo se envía el mensaje. Solo confía en que cualquier clase que implemente INotificador cumplirá el contrato.
¿Por qué este principio mejora la calidad del software?
Aplicar inversión de dependencias mejora la modularidad y facilita el mantenimiento, porque las clases de alto nivel como los servicios dejan de depender de implementaciones detalladas. Y aquí viene lo interesante: cambiar de implementación se vuelve trivial.
Si tienes varios algoritmos para resolver la misma tarea, intercambiarlos no debería ser un problema cuando la inversión está bien hecha. Eso reduce el acoplamiento: los cambios en módulos concretos no afectan al sistema principal. Puedes optimizar un algoritmo de bajo nivel y mejorar el tiempo de ejecución o disminuir la complejidad algorítmica sin tocar quien lo consume.
¿Cuál es el mayor beneficio de invertir dependencias?
La testabilidad. Este principio facilita el uso de mocks y stubs en pruebas, lo que te permite testear sin depender de implementaciones concretas.
Piensa en un servicio que hace consultas a una base de datos. Si dependes directamente de la base de datos, necesitas levantar todo un entorno de ejecución para probarlo. En cambio, si aplicaste inversión de dependencias, simplemente preparas un mock del servicio que hace las consultas y listo. Tus pruebas unitarias corren rápido y sin infraestructura externa.
¿Por qué la inversión de dependencias facilita las pruebas? Porque permite reemplazar dependencias reales por mocks o stubs, evitando preparar entornos complejos como bases de datos, APIs externas o servicios de terceros para correr pruebas unitarias.
Si quieres profundizar en este tema, revisa el curso de pruebas en Python disponible en Platzi.
¿Cuándo deberías aplicar la inversión de dependencias?
No todo el código necesita este nivel de abstracción. Aplícalo cuando detectes señales claras de fricción en tu base de código.
- Alto acoplamiento entre módulos de alto y bajo nivel: si tienes un servicio con varios algoritmos disponibles para resolver el mismo problema e intercambiarlos resulta engorroso, el servicio no debería depender de cómo se implementa el algoritmo, sino de una interfaz que lo defina.
- Dificultad para escribir pruebas unitarias: si crear un entorno de ejecución para probar un servicio es complicado, saca esa definición hacia otra clase y aplica el principio. Con un mock sobre la nueva dependencia, la complejidad de las pruebas baja muchísimo.
- Problemas para reutilizar componentes o escalar: cuando reutilizar lógica entre servicios se vuelve difícil, extraer esos algoritmos hacia clases independientes detrás de una abstracción te abre la puerta a usarlos en nuevas definiciones sin duplicar código.
¿Cuándo aplicar el principio de inversión de dependencias? Cuando hay alto acoplamiento, cuando las pruebas unitarias son difíciles de escribir o cuando reutilizar y escalar componentes se vuelve costoso.
La inversión de dependencias es, en muchos sentidos, la pieza que conecta el resto de los principios SOLID. Sin ella, conceptos como la sustitución de Liskov o la segregación de interfaces pierden gran parte de su poder práctico.
¿Cómo aplicarías la inversión de dependencias en el procesador de pagos que estamos construyendo? Déjame tu opinión en los comentarios y comparte qué interfaces extraerías primero.