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 utiliza 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 forma sería crear una interfaz (clase abstracta),
from abc import ABC, abstractmethod
class Storage(ABC):
@abstractmethod
def save(self):
passY luego 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.
Ten en cuenta 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)