عرقلة التغيير (Change Preventers)
< Refactoring | smells
قد يكون تطوير بعض الشيفرات مشكلةً حقيقيةً إذ عند إحداث أيّ تغييرٍ في جزءٍ منها لا بُدَّ وأن تتبعه عدّة تغييراتٍ أخرى في أجزاء متفرِّقة، وبالتالي سيصبح تطوير البرنامج شائكًا معقّدًا وبتكلفةٍ غير زهيدةٍ، من معوِّقات التغيير:
- التغيير المتشعِّب (divergent change)
- المشكلة: الحاجة لتغيير الكثير من التوابع التي لا علاقة لها بالأمر بمجرَّد إحداث أيّ تغيير في الصنف.
- الحل: عزل سلوك الصنف عبر إنشاء صنفٍ جديدٍ، أو دمج الأصناف عبر الوراثة وذلك باستخراج الصنف الأعلى (superclass) أو استخراج الصنف الفرعيّ عند وجود أصناف مختلفةٍ تتماثل بنفس السلوك.
- الهيكليّة التفرعيّة للوراثة (parallel inheritance hierarchies)
- المشكلة: يتطلَّب إنشاءُ صنفٍ فرعيٍّ لأحد الأصناف إنشاءَ صنفٍ فرعيٍّ ثانٍ لصنفٍ آخر غيره.
- الحل: التخلُّص من التكرار التفرعيّ بين الهيكليّتين، ويتمّ بخطوتين: إنشاء مرجعيّة من إحدى الهيكليّتين التفرعيّتين إلى الهيكليّة الثانية، وإزالة الهيكليّة في الصنف المُشار إليه، وذلك بنقل التوابع ونقل الحقول.
- تغيير الأصناف المتعدِّدة (shotgun surgery)
- المشكلة: يتطلَّبُ أيُّ تعديلٍ تقوم به إجراءَ تغييراتٍ طفيفةٍ بأصناف متفرِّقة.
- الحل: نقل سلوك الأصناف إلى صنفٍ واحدٍ عبر نقل التوابع ونقل الحقول إلى الصنف المناسب أو إنشاء صنفٍ جديدٍ عند عدم وجوده.