Refactoring/smells/bloaters
< Refactoring | smells
اذهب إلى التنقل
اذهب إلى البحث
قد يزداد حجم الشيفرات والتوابع (methods) والأصناف (classes) ازديادًا كبيرًا ليصل لمرحلةٍ يصعُب التعامل معها، ولا يحدث هذا بشكلٍ فجائيِّ دفعةً واحدةً، بل يكون ناتجًا عن تراكم الإضافات أثناء تطوير البرنامج (وخاصةً عندما لا يبذل أحدٌ جهدًا للحدِّ من ذلك التشعب)، ويبدو هذا التضخم واضحًا.
- التوابع الطويلة (long methods)
- المشكلة: تنتُج عن احتواء شيفرة التابع على الكثير من الأسطر.
- الحل: يشمل: إنشاء توابعَ جديدةٍ، أو تبديل المتغيَّرات المؤقَّتة إلى استداعاءات للدوال أو الاعتماد على كائن المعاملات، أو التعامل مع الكائن ككُلٍّ، أو يمكن الحل نقل التابع بأكمله إلى كائنٍ مستقلٍ، أو تفكيكُ الشروط أو إنشاء تابعٍ جديدٍ لها.
- الأصناف الواسعة (large classes)
- المشكلة: حواية الصنف (class) العديدَ من الحقول (fields) والتوابع (methods) وشيفرةً بأسطرَ كثيرةٍ.
- الحل: يكون بإحدى الوسائل التالية: إنشاء صنفٍ جديدٍ، أو إنشاء صنفٍ فرعيٍّ، أو إنشاء واجهةٍ، أو نقلُ بعض بيانات الصنف ومهامّه إلى كائنٍ مجاليّ.
- هوس الحقول الأساسيّة (primitives obsession)
- المشكلة: تظهر المشكلة بعدَّة جوانب هي: استخدام الأنواع الأساسية بدلًا من الكائنات، أو استخدام الثوابت لترميز المعلومات، أو استخدام الثوابت النصية كأسماء للحقول.
- الحل: هنالك عدة حلول لهذه المشكلة هي: تجميع الحقول المتقاربة في صنفٍ خاصٍ بها، أو إنشاء كائن المعاملات أو التعامل مع الكائن ككُل، أو تبديل شيفرة النوع إلى صنف أو تبديل شيفرة النوع إلى صنف فرعيّ أو تبديل شيفرة النوع إلى حالة/استراتيجيّة، أو بتبديل المصفوفة إلى كائن.
- المعاملات الكثيرة في التوابع (long parameter list)
- المشكلة: وجود ما يزيد عن ثلاثة أو أربعة معاملات (parameters) مُمرَّرة للتابع (method).
- الحل: يتفاوت الحل تبعًا للحالة؛ فيمكن أن يكون الحل هو تبديل المعاملات التي تنتج قيمتها عن استدعاء تابع إلى هذا التابع نفسه، أو تمرير الكائن ككل بدلًا من تمرير البيانات المرتبطة به بشكل متفرق، أو إنشاء كائن معاملات وتمريرها سويةً.
- البيانات المُجمَّعة (data clumps)
- المشكلة: تكرار مجموعةٍ من المتغيِّرات (variables) بشكلٍ متطابقٍ تمامًا في عدّة أجزاء من الشيفرة، إذ يجب تحويل تلك المجموعات إلى أصنافها (classes) الخاصّة بها.
- الحل: يعتمد الحل على حالة الاستخدام؛ فيمكن أن يكون الحل هو إنشاء صنف ونقل الحقول إليه، أو إنشاء كائن معاملات لفصلها في صنف مستقل، أو تمرير كائن يمثِّل البيانات المراد تمريرها كحقول متفرقة، أو قد يكون الحل ببساطة هو نقل مجموعة الحقول المكررة إلى صنف للبيانات.