Bağımlılığın ters çevrilmesi
Coddy'nin Clean Code - Python ile daha iyi kod yazın kursunda ders 26 / 28.
"Soyutlamalara bağlı kalın, somutlamalara [değil]."
İlkeyi ihlal eden bir örnek gösterelim,
class LocalStorage:
def save(self, key, value):
print("Saved, " + key + ":" + value)LocalStorage sınıfı anahtar ve değer çiftini kaydeder.
Şimdi LocalStorage'ı kullanan başka bir ana sınıfımız var,
class App:
def start(self, key, value):
storage = LocalStorage()
storage.save(key, value)LocalStorage somut bir uygulamadır ve App ona bağımlıdır!
Daha iyi bir yol, bir arayüz (soyut sınıf) oluşturmak olacaktır,
from abc import ABC, abstractmethod
class Storage(ABC):
@abstractmethod
def save(self):
passVe sonra somut uygulama yerine arayüzün bir örneğini kullanın.
Görev
KolaySize neredeyse tamamlanmış bir kod verildi, Storage soyut sınıfını ekleyin.
Uygulamadan sonra, örneğin CloudStorage gibi başka bir somut sınıfa geçiş yapmanın kolay olduğunu fark edin...
Kendin dene
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)