الأصناف الواسعة (Large Classes)

من موسوعة حسوب
< Refactoring
مراجعة 07:29، 2 مارس 2019 بواسطة جميل-بيلوني (نقاش | مساهمات) (تعديل التصنيفات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

توصيف المشكلة

احتواء الصنف (class) العديدَ من الحقول (fields) والتوابع (methods) وشيفرةً بأسطرَ كثيرةٍ.

أسبابها

تبدأ الأصناف صغيرةً ليزداد حجمها مع استمرار تطوُّر البرنامج (كما الحال بالتوابع الطويلة) لأنَّ المبرمج يرى أنَّ إضافة ميِّزاتٍ (features) جديدةٍ في صنفٍ موجودٍ مسبقًا أكثر سهولةً من إنشاء أصنافٍ جديدةٍ مخصَّصةٍ لها.

وما الحل؟

الحل بسيطٌ جدًا؛ وهو تقسيم الصنف، وذلك بإحدى الوسائل الآتية:

  • إنشاء صنفٍ جديدٍ (Extract Class) إن كان من الممكن فصلُ بعض مهامّ الصنف الحاليّ ونقلها للصنف الجديد.
  • إنشاء صنفٍ فرعيٍّ (Extract Subclass) لدى وجود جزءٍ يمكن تعريف استخدامه (implementation) بأكثر من طريقة، أو إن كان نادر الاستخدام بالأصل.
  • إنشاء واجهةٍ (Extract Interface) عند الحاجة لوجود قائمةٍ بالعمليّات (operations) والإجراءات (functions) التي سيستفيد منها العميل (client).
  • أمّا إن كان الصنف مسؤولًا عن واجهةٍ رسوميّةٍ (graphical interface) فالأفضلُ حينها نقلُ بعض بياناته ومهامّه (functions) إلى كائنٍ مجاليّ (domain object)، وسيصبح من الضروري عندئذٍ تخزينُ بعض البيانات في مكانين مع إبقائها متماشيةً (consistent) مع بعضها، وللمزيد عن كيفيّة القيام بذلك راجع البيانات المُكرَّرة المراقَبَة (Duplicate Observed Data).

إليك المزيد

توفِّر إعادة تصميم (refactoring) الأصناف الواسعة على المُطوِّر الحاجة لتذكُّر العدد الكبير لخصائص الصنف (class attributes)، وتمنع كذلك تكرار (duplication) الشيفرة والمهامّ البرمجيّة (functions).

انظر أيضًا

مصادر