Dependency Inversion significa…
Opciones
- Las subclases llaman a los métodos de sus padres al revés
- Los módulos de alto nivel dependen de abstracciones, no de detalles concretos (Opción correcta)
- Las dependencias se instalan en orden inverso a su uso
- 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 edgeRecuerda
Depende de interfaces y conecta la clase concreta desde fuera.