عكس التبعية
الدرس 26 من 28 في دورة Clean Code - كتابة كود أفضل باستخدام Python على Coddy.
"اعتمد على التجريدات، [وليس] على التجسيدات."
دعونا نعرض مثالاً ينتهك هذا المبدأ،
class LocalStorage:
def save(self, key, value):
print("Saved, " + key + ":" + value)يقوم فئة LocalStorage بحفظ زوج المفتاح والقيمة.
الآن لدينا فئة رئيسية أخرى تستخدم LocalStorage،
class App:
def start(self, key, value):
storage = LocalStorage()
storage.save(key, value)تعتبر LocalStorage تنفيذاً ملموساً (concrete) وتعتمد App عليها!
الطريقة الأفضل هي إنشاء واجهة (فئة مجردة - abstract class)،
from abc import ABC, abstractmethod
class Storage(ABC):
@abstractmethod
def save(self):
passثم استخدم نسخة من الواجهة بدلاً من التنفيذ الملموس.
التحدي
سهللقد تم تزويدك بكود مكتمل تقريبًا، أضف الفئة المجردة Storage.
لاحظ أنه بعد التنفيذ، من السهل التغيير إلى فئة ملموسة أخرى على سبيل المثال CloudStorage...
جرّب بنفسك
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)