Đả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):
passSau đó dùng một instance của giao diện thay vì phần triển khai cụ thể.
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
6SOLID
Giới thiệuTrách nhiệm đơn nhấtMở rộng, đóng sửa đổiThay thế LiskovPhân tách giao diệnĐảo ngược phụ thuộcTự luyện tập: Trình biên dịch Python online