هدم التسلسل الهرمي (Collapse Hierarchy)
المشكلة
في التسلسل الهرمي لصنف يكون صنفٌ فرعي هو عمليًا نفس صنفه الفائق.
الحل
دمج الصنف الفرعي والصنف الفائق.
مثال
قبل إعادة التصميم
بعد إعادة التصميم
لم إعادة التصميم؟
قد يؤدي نمو البرنامج مع مرور الوقت إلى أن يصبح كلٌ من الصنف الفرعي والصنف الفائق تقريبًا نفس الشيء. فتُزال ميزة من الصنف الفرعي، ويُنقل تابع إلى الصنف الفائق... والآن لديك صنفين متشابهين.
فوائد تطبيق الحل
- تقليل تعقيد البرنامج. تعني الأصناف الأقل أن عدد أشياء أقل قد تشغل الانتباه، وقلق أقل على أجزاء متحركة قابلة للتقسيم عند إجراء التغييرات التي تطرأ على الشيفرة في المستقبل.
- يكون التنقل خلال الشيفرة أسهل عند تعريف التوابع في صنفٍ واحد في وقتٍ مبكر. لا تحتاج إلى تمشيط التسلسل الهرمي بأكمله للعثور على تابعٍ معين.
متى يُترك هذا الحل؟
- هل للتسلسل الهرمي للصنف الذي يُعاد تصميمه أكثر من صنف فرعي؟ وإذا كان كذلك، بعد اكتمال إعادة التصميم، يجب أن ترث الأصناف الفرعية المتبقية الصنف الذي ينهدم فيه التسلسل الهرمي.
- ولكن ضع في اعتبارك أن هذا يمكن أن يؤدي إلى انتهاكات مبدأ ليسكوف للتعويض. على سبيل المثال، إذا كان البرنامج يحاكي شبكات النقل في المدينة وقمت بهدم الصنف الفائق
النقل
عن طريق الخطأ في الصنف الفرعيالسيارة
، قد يصبح الصنفالطائرة
هو وارثالسيارة
. للأسف!
آلية الحل
- حدد أي الصنفين هو الأسهل في الإزالة: الصنف الفائق أو الصنف الفرعي.
- إذا قررت التخلص من الصنف الفرعي استخدم سحب الحقل لأعلى وسحب التابع لأعلى. أمَّا إذا اخترت القضاء على الصنف الفائق، استخدم دفع الحقل لأسفل ودفع التابع لأسفل.
- استبدل جميع استخدامات الصنف التي تحذفه بالصنف الذي ستنتقل إليه الحقول والتوابع. غالبًا ما تكون شيفرة لإنشاء الأصناف، وكتابة المتغير والمعامل، والتوثيق في تعليقات الشيفرة.
- احذف الصنف الفارغ.
انظر أيضًا
- [[Refactoring/inline class|دمج الصنف] (Inline Class)]: هدم التسلسل الهرمي هو شكل مختلف لدمج الصنف، حيث تنتقل الشيفرة إلى صنف فائق أو صنف فرعي.
- الأصناف الخاملة (Lazy Classes).
- التعميم القائم على الحدس (Speculative Generality).