Menu
CoddyTech

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

Lalu gunakan instance dari interface alih-alih implementasi konkretnya. 

challenge icon

Tantangan

Mudah

Kamu 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