Pembalikan dependensi
Pelajaran 26 dari 28 dalam kursus Clean Code: Menulis kode yang lebih baik dengan Python di Coddy.
"Bergantunglah pada abstraksi, [bukan] konkretisasi."
Mari kita lihat contoh yang melanggar prinsip ini,
class LocalStorage:
def save(self, key, value):
print("Saved, " + key + ":" + value)class LocalStorage menyimpan pasangan key dan value.
Sekarang kita punya class utama lain yang menggunakan LocalStorage,
class App:
def start(self, key, value):
storage = LocalStorage()
storage.save(key, value)LocalStorage adalah implementasi konkret dan App bergantung padanya!
Cara yang lebih baik adalah membuat interface (abstract class),
from abc import ABC, abstractmethod
class Storage(ABC):
@abstractmethod
def save(self):
passLalu gunakan instance dari interface alih-alih implementasi konkretnya.
Tantangan
MudahKamu diberi kode yang hampir selesai, tambahkan abstract class Storage.
Perhatikan bahwa setelah implementasi, mudah untuk menggantinya dengan class konkret lain, misalnya CloudStorage...
Coba sendiri
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)
Semua pelajaran di Clean Code: Menulis kode yang lebih baik dengan Python
Latihan sendiri: Compiler Python online