Dependency Inversion
Lektion 26 von 28 im Kurs Clean Code - Schreibe besseren Code mit Python von Coddy.
"Hängen Sie von Abstraktionen ab, [nicht] von Konkretionen."
Schauen wir uns ein Beispiel an, das gegen dieses Prinzip verstößt:
class LocalStorage:
def save(self, key, value):
print("Saved, " + key + ":" + value)Die Klasse LocalStorage speichert Schlüssel-Wert-Paare.
Nun haben wir eine weitere Hauptklasse, die den LocalStorage verwendet:
class App:
def start(self, key, value):
storage = LocalStorage()
storage.save(key, value)LocalStorage ist eine konkrete Implementierung und App hängt von ihr ab!
Der bessere Weg wäre es, ein Interface (eine abstrakte Klasse) zu erstellen:
from abc import ABC, abstractmethod
class Storage(ABC):
@abstractmethod
def save(self):
passUnd dann eine Instanz des Interfaces anstelle der konkreten Implementierung zu verwenden.
Aufgabe
EinfachSie erhalten Code, der fast fertig ist, fügen Sie die abstrakte Klasse Storage hinzu.
Beachten Sie, dass es nach der Implementierung einfach ist, zu einer anderen konkreten Klasse zu wechseln, zum Beispiel CloudStorage...
Probier es selbst
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)