Menu
CoddyTech

Đảo ngược phụ thuộc

Bài học 26 trên 28 trong khóa học Clean Code: viết code tốt hơn với Python của Coddy.

"Phụ thuộc vào trừu tượng, [không phải] cụ thể."

Hãy xem một ví dụ vi phạm nguyên tắc này:

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

Lớp LocalStorage lưu cặp khóa và giá trị.

Giờ ta có một lớp chính khác sử dụng LocalStorage:

class App:
	def start(self, key, value):
		storage = LocalStorage()
		storage.save(key, value)

LocalStorage là một phần triển khai cụ thể và App phụ thuộc vào nó!

Cách tốt hơn là tạo một giao diện (lớp trừu tượng):

from abc import ABC, abstractmethod


class Storage(ABC):
	@abstractmethod
	def save(self):
		pass

Sau đó dùng một instance của giao diện thay vì phần triển khai cụ thể. 

challenge icon

Thử thách

Dễ

Bạn được cung cấp đoạn code gần hoàn chỉnh, hãy thêm lớp trừu tượng Storage.

Lưu ý rằng sau khi triển khai, bạn có thể dễ dàng chuyển sang lớp cụ thể khác, chẳng hạn như CloudStorage...

Tự làm thử

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)

Tất cả bài học trong Clean Code: viết code tốt hơn với Python

Tự luyện tập: Trình biên dịch Python online