Inversione delle dipendenze
Lezione 26 di 28 del corso Codice pulito - Scrivi codice migliore con Python di Coddy.
"Dipendi dalle astrazioni, [non] dalle concretezze."
Vediamo un esempio che viola il principio,
class LocalStorage:
def save(self, key, value):
print("Saved, " + key + ":" + value)La classe LocalStorage salva una coppia chiave-valore.
Ora abbiamo un'altra classe principale che usa LocalStorage,
class App:
def start(self, key, value):
storage = LocalStorage()
storage.save(key, value)LocalStorage è un'implementazione concreta e App dipende da essa!
La soluzione migliore sarebbe creare un'interfaccia (classe astratta),
from abc import ABC, abstractmethod
class Storage(ABC):
@abstractmethod
def save(self):
passE poi usare un'istanza dell'interfaccia anziché l'implementazione concreta.
Sfida
FacileTi viene fornito del codice quasi completo; aggiungi la classe astratta Storage.
Nota che dopo l’implementazione è facile passare a un’altra classe concreta, per esempio CloudStorage...
Provalo tu
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)
Tutte le lezioni di Codice pulito - Scrivi codice migliore con Python
Esercitati da solo: Compilatore Python online