Menu
Coddy logo textTech

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):
		pass

Und dann eine Instanz des Interfaces anstelle der konkreten Implementierung zu verwenden. 

challenge icon

Aufgabe

Einfach

Sie 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)

Alle Lektionen in Clean Code - Schreibe besseren Code mit Python