Aplicación del Principio de Inversión de Dependencias en Python
Clase 12 de 27 • Curso de Patrones de Diseño y SOLID en Python
Contenido del curso
- 2

Principio de Responsabilidad Única en Desarrollo de Software
05:59 - 3

Procesador de Pagos con Principios SOLID y Stripe
11:14 - 4

Aplicación del Principio de Responsabilidad Única en Procesador de Pagos
25:30 - 5

Principio Abierto-Cerrado en Desarrollo de Software
02:39 - 6

Implementación del Principio Abierto-Cerrado en Procesadores de Pago y Notificadores
14:46 - 7

Principio de Sustitución de Liskov en Desarrollo de Software
03:18 - 8

Aplicación del Principio de Sustitución de Liskov en Python
06:44 - 9

Principio de Segregación de Interfaces en Software
02:33 - 10

Implementación del Principio de Segregación de Interfaces en Procesadores de Pago
09:06 - 11

Principio de Inversión de Dependencias en Software
04:23 - 12

Aplicación del Principio de Inversión de Dependencias en Python
05:56
- 14

Introducción a los Patrones de Diseño de Software
03:54 - 15

Patrón Strategy en Diseño de Software con Python
01:55 - 16

Implementación del Strategy Pattern en Procesador de Pagos en Python
10:58 - 17

Patrón Factory Pattern en Python: Creación de Objetos Dinámicos
03:05 - 18

Patrón Factory en Procesadores de Pago en Python
11:06 - 19

Patrón Decorador: Añadir Responsabilidades Dinámicas a Objetos
03:06 - 20

Aplicación del Patrón Decorador en Servicios de Pago
12:57 - 21

Patrón de Diseño Builder: Construcción de Objetos Complejos
01:28 - 22

Builder Pattern para Servicio de Pagos en Python
18:55 - 23

Patrón Observer: Gestión de Eventos y Notificaciones Automáticas
01:48 - 24

Patrón Observer en Sistemas de Pago: Implementación y Notificaciones
11:12 - 25

Patrón Chain of Responsibility en Validación de Pagos
02:04 - 26

Implementación del patrón Chain of Responsibility en validaciones de pago
16:27 - 27

Principios SOLID y Patrones de Diseño en Procesadores de Pago
03:19
El principio de inversión de dependencias es clave para mejorar la arquitectura del código, y este ejemplo sobre el servicio de pagos lo ilustra perfectamente. En lugar de que la clase de alto nivel dependa de detalles de las clases de bajo nivel, se trabaja con abstracciones, lo que permite mayor flexibilidad al añadir nuevas funcionalidades.
¿Cumple el código con el principio de inversión de dependencias?
Sí, el código cumple con el principio desde el momento en que el servicio de pagos (clase de alto nivel) no depende directamente de los detalles de los procesadores de pagos, validadores o notificadores, sino de interfaces o protocolos. Esto significa que, si alguna de las implementaciones cambia, el servicio de alto nivel no requiere modificaciones, ya que interactúa únicamente con las abstracciones.
¿Qué detalles pueden mejorar para aplicar mejor el principio?
Aunque la implementación está alineada con el principio de inversión de dependencias, hay un detalle por mejorar: las clases de alto nivel aún instancian clases de bajo nivel dentro de sus atributos, como los validadores o el logger. Para eliminar esta dependencia, se recomienda remover esas “default factories” y en su lugar, inyectar todas las dependencias desde fuera del servicio. Esto garantizaría una mayor adherencia al principio.
¿Cómo se instancia el servicio de pagos aplicando el principio?
El código muestra claramente cómo se instancian las dependencias antes de crear el servicio de pagos. Se crea el procesador de pagos de Stripe, un notificador de email, los validadores de clientes y pagos, así como el logger. Luego, se pasa cada dependencia al PaymentService, asegurando que el servicio de alto nivel no conozca los detalles internos de las clases de bajo nivel.
- Se instancia el procesador de Stripe y se reutiliza para recurrencias y reembolsos.
- Si se requiere un servicio con otro procesador, como uno offline, el cambio es sencillo porque las clases están desacopladas.
¿Cómo permite la inyección de dependencias mejorar la flexibilidad del código?
La inyección de dependencias facilita la flexibilidad, ya que permite cambiar las implementaciones sin modificar el servicio principal. Si en lugar de Stripe se requiere otro procesador o un notificador distinto como SMS, el código solo necesita ajustar las instancias que se pasan al servicio, sin afectar el código principal.