Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

عكس التبعية

الدرس 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

ثم استخدم نسخة من الواجهة بدلاً من التنفيذ الملموس. 

challenge icon

التحدي

سهل

لقد تم تزويدك بكود مكتمل تقريبًا، أضف الفئة المجردة 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)

جميع دروس Clean Code - كتابة كود أفضل باستخدام Python