Dependency inversion
Lección 26 de 28 del curso Clean Code - Write better code using Python de Coddy.
"Depende de las abstracciones, [no de] las concreciones."
Veamos un ejemplo que viola el principio:
class LocalStorage:
def save(self, key, value):
print("Saved, " + key + ":" + value)La clase LocalStorage guarda un par de clave y valor.
Ahora tenemos otra clase principal que usa LocalStorage:
class App:
def start(self, key, value):
storage = LocalStorage()
storage.save(key, value)LocalStorage es una implementación concreta y App depende de ella.
La mejor manera sería crear una interfaz (clase abstracta):
from abc import ABC, abstractmethod
class Storage(ABC):
@abstractmethod
def save(self):
passY después usar una instancia de la interfaz en lugar de la implementación concreta.
Desafío
FácilSe te proporciona un código que está casi terminado; añade la clase abstracta Storage.
Observa que, después de la implementación, es fácil cambiar a otra clase concreta, por ejemplo
CloudStorage...
Pruébalo tú mismo
from abc import ABC, abstractmethod
# your code here
class LocalStorage(Storage):
def save(self, key, value):
print("Saved, " + key + ":" + value)
class App:
def __init__(self, storage):
self.storage = storage
def start(self, key, value):
storage.save(key, value)
if __name__ == "__main__":
storage = LocalStorage()
app = App(storage)
key = input()
value = input()
app.start(key, value)
Todas las lecciones de Clean Code - Write better code using Python
Practica por tu cuenta: Compilador de Python online