دمج الصنف (Inline Class)
المشكلة
وجود صنفٍ (class) لا يقوم بأيّ مهمّة فعليّة ولا يُخطَّط لإضافة مهامٍ إليه لاحقًا.
الحل
نقل كافّة الميّزات (features) من هذا الصنف إلى صنفٍ آخر.
مثال
قبل إعادة التصميم
يحتوي الصنف Person
على حقلٍ واحدٍ باسم name
وتابعٍٍ للحصول على رقم الهاتف getTelephoneNumber
ولاشيء آخر، أمّا الصنف TelephoneNumber
فهو يحتوي على حقلين باسم officeAreaCode
و officeNumber
بالإضافة إلى التابع السابق getTelephoneNumber
، كما هو موضَّحٌ في مخطط الأصناف الآتي:
بعد إعادة التصميم
دُمِج الصنف TelephoneNumber
مع الصنف Person
ليشمل كلَّ الحقول والتوابع الموجودة فيهما، كما في مخطط الأصناف الآتي:
لم إعادة التصميم؟
يُلجَأ عادةً إلى دمج الصنف من بعد نقل ميّزاته (features) إلى أصناف أخرى بحيث يصبح الصنف مهملًا ولا أهمية لما يقوم به.
فوائد تطبيق الحل
التقليل من الأصناف غير الضروريّة في البرنامج مما يعني استفادةً أكبر من الذاكرة أثناء التشغيل، وكذلك من دماغ المبرمج! فلِمَ يشغل تفكيره بأصنافٍ لا أهمية لها؟
آلية الحل
- إنشاء حقولٍ وتوابع عامّةٍ (public fields/methods) في الصنف المستقبِل (recipient class) بما يتناسب مع الحقول والتوابع الموجودة في الصنف الأصليّ الذي سيُدمج.
- تبديل كل مرجعيّات (references) الصنف الأصليّ إلى مرجعيّات الحقول والتوابع الجديدة في الصنف المستقبِل.
- اختبار البرنامج والتأكُّد من عدم حدوث أيّ أخطاءٍ بالنتائج، وبمجرد اجتياز الاختبار بنجاح يجب البدء بتطبيق تقنيتي نقل التوابع (Move Methods) ونقل الحقول (Move Fields) لنقل المهام (functionality) بأكملها من الصنف الأصليّ إلى الصنف المستقبل، والاستمرار بنقلها إلى أن يصبح الصنف فارغًا بأكمله.
- حذف الصنف الأصليّ.