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

من موسوعة حسوب
< Refactoring
مراجعة 04:25، 18 يوليو 2018 بواسطة Nourtam (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الأصناف الواسعة (Large Classes)}}</noinclude> == توصيف المشكلة == احتواء الصنف (class) العديدَ من...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

احتواء الصنف (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).

انظر أيضًا

مصادر