Repaso
English

Dependency Inversion significa…

Opciones

  1. Las subclases llaman a los métodos de sus padres al revés
  2. Los módulos de alto nivel dependen de abstracciones, no de detalles concretos (Opción correcta)
  3. Las dependencias se instalan en orden inverso a su uso
  4. Se usa herencia en lugar de composición en todas las clases

Respuesta

Los módulos de alto nivel dependen de abstracciones, no de módulos concretos de bajo nivel

Por qué

El código de alto nivel (reglas de negocio, como OrderService) no debe depender directamente de detalles de bajo nivel (como la librería de Stripe). Ambos deben depender de una abstracción, por ejemplo una interface PaymentGateway.

Así puedes cambiar Stripe por PayPal, o por un fake en los tests, sin tocar OrderService.

class OrderService:
    def __init__(self, gateway: PaymentGateway):   # abstraction
        self.gateway = gateway

service = OrderService(StripeGateway())   # concrete choice at the edge

Recuerda

Depende de interfaces y conecta la clase concreta desde fuera.

Términos clave

Practica esta pregunta en Repaso