Menu
Coddy logo textTech

Dependency Inversion

Lektion 26 von 28 im Kurs Clean Code - Schreibe besseren Code mit Python von Coddy.

„Verlasse dich auf Abstraktionen, [nicht auf] Konkretionen.“

Sehen wir uns ein Beispiel an, das gegen das Prinzip verstößt:

class LocalStorage:
	def save(self, key, value):
		print("Saved, " + key + ":" + value)

Die LocalStorage-class speichert ein Schlüssel-Wert-Paar.

Nun haben wir eine weitere Haupt-class, die 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, ein Interface (eine abstrakte class) 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

Dir wird Code gegeben, der fast fertig ist. Füge die abstrakte Klasse Storage hinzu.

Beachte, 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

Übe selbstständig: Online-Python-Compiler