دمج الصنف (Inline Class)

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

المشكلة

وجود صنفٍ (class) لا يقوم بأيّ مهمّة فعليّة ولا يُخطَّط لإضافة مهامٍ إليه لاحقًا.

الحل

نقل كافّة الميّزات (features) من هذا الصنف إلى صنفٍ آخر.

مثال

قبل إعادة التصميم

يحتوي الصنف Person على حقلٍ واحدٍ باسم name وتابعٍٍ للحصول على رقم الهاتف getTelephoneNumber ولاشيء آخر، أمّا الصنف TelephoneNumber فهو يحتوي على حقلين باسم officeAreaCode و officeNumber بالإضافة إلى التابع السابق getTelephoneNumber، كما هو موضَّحٌ في مخطط الأصناف الآتي:

الصنف Person يحتوي على حقلٍ واحدٍ باسم name وتابعٍٍ للحصول على رقم الهاتف getTelephoneNumber، أمّا الصنف TelephoneNumber فهو يحتوي على حقلين باسم officeAreaCode و officeNumber بالإضافة إلى التابع السابق getTelephoneNumber.
الصنف Person يحتوي على حقلٍ واحدٍ باسم name وتابعٍٍ للحصول على رقم الهاتف getTelephoneNumber، أمّا الصنف TelephoneNumber فهو يحتوي على حقلين باسم officeAreaCode و officeNumber بالإضافة إلى التابع السابق getTelephoneNumber.

بعد إعادة التصميم

دُمِج الصنف TelephoneNumber مع الصنف Person ليشمل كلَّ الحقول والتوابع الموجودة فيهما، كما في مخطط الأصناف الآتي:

الصنف Person يحتوي على عددٍ من الحقول كاسم الشخص (name) ورمز منطقة المكتب (officeAreaCode) ورقمه (officeNumber)، وتابعًا للحصول على هذا الرقم باسم getTelephoneNumber.
الصنف Person يحتوي على عددٍ من الحقول كاسم الشخص (name) ورمز منطقة المكتب (officeAreaCode) ورقمه (officeNumber)، وتابعًا للحصول على هذا الرقم باسم getTelephoneNumber.

لم إعادة التصميم؟

يُلجَأ عادةً إلى دمج الصنف من بعد نقل ميّزاته (features) إلى أصناف أخرى بحيث يصبح الصنف مهملًا ولا أهمية لما يقوم به.

فوائد تطبيق الحل

التقليل من الأصناف غير الضروريّة في البرنامج مما يعني استفادةً أكبر من الذاكرة أثناء التشغيل، وكذلك من دماغ المبرمج! فلِمَ يشغل تفكيره بأصنافٍ لا أهمية لها؟

آلية الحل

  1. إنشاء حقولٍ وتوابع عامّةٍ (public fields/methods) في الصنف المستقبِل (recipient class) بما يتناسب مع الحقول والتوابع الموجودة في الصنف الأصليّ الذي سيُدمج.
  2. تبديل كل مرجعيّات (references) الصنف الأصليّ إلى مرجعيّات الحقول والتوابع الجديدة في الصنف المستقبِل.
  3. اختبار البرنامج والتأكُّد من عدم حدوث أيّ أخطاءٍ بالنتائج، وبمجرد اجتياز الاختبار بنجاح يجب البدء بتطبيق تقنيتي نقل التوابع (Move Methods) ونقل الحقول (Move Fields) لنقل المهام (functionality) بأكملها من الصنف الأصليّ إلى الصنف المستقبل، والاستمرار بنقلها إلى أن يصبح الصنف فارغًا بأكمله.
  4. حذف الصنف الأصليّ.

انظر أيضًا

مصادر