Odwrócenie zależności
Lekcja 26 z 28 w kursie Czysty kod — pisz lepszy kod w Pythonie w Coddy.
„Polegaj na abstrakcjach, [nie] konkretach”.
Pokażmy przykład, który narusza tę zasadę,
class LocalStorage:
def save(self, key, value):
print("Saved, " + key + ":" + value)Klasa LocalStorage zapisuje parę klucz i wartość.
Teraz mamy kolejną główną klasę, która korzysta z LocalStorage,
class App:
def start(self, key, value):
storage = LocalStorage()
storage.save(key, value)LocalStorage to konkretna implementacja, od której zależy App!
Lepszym rozwiązaniem byłoby utworzenie interfejsu (klasy abstrakcyjnej),
from abc import ABC, abstractmethod
class Storage(ABC):
@abstractmethod
def save(self):
passA następnie użycie instancji interfejsu zamiast konkretnej implementacji.
Wyzwanie
ŁatwyOtrzymujesz prawie gotowy kod. Dodaj klasę abstrakcyjną Storage.
Zauważ, że po implementacji łatwo jest zmienić ją na inną klasę konkretną, na przykład CloudStorage...
Spróbuj swoich sił
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)
Wszystkie lekcje w sekcji Czysty kod — pisz lepszy kod w Pythonie
Poćwicz samodzielnie: Kompilator Python online