Code Smell , تخلص من السباجيتي , الجزء الأول !

تحدثنا في المقال السابق عن ضرورة عملية  إعادة بنية التعليمات البرمجية (Refactoring) ودورها الكبير في تحسين التطبيق وسرعة فهمه وسهولة إصلاح أخطاءه ,  و في نفس السياق أشرنا إلى عدم جعلها عملية بدون هدف محدد ومهام , حتى لا تبقى العملية مفتوحة

عمليات إعادة بنية التعليمات البرمجية

التأكد من عمل الوحدات الإختبارية الخاصة بالتطبيق 100% -> البحث عن Code Smell -> توضيح التحسينات وعمليات التبسيط -> تنفيذ التحسينات وعمليات التبسيط -> التأكد من عمل الوحدات الإختبارية 100% بعد العمليات

ما هو ال Code Smell:

أماكن في التعليمات البرمجية تؤشر إلى وجود شيء خاطيء , أو ممكن أن تسبب خطأ

 

تكرار التعليمات البرمجية : في كثير من الأحيان تشاهد أن التعليمات البرمجية مكررة في أكثر من مكان بنفس البناء ولذلك من الأفضل وضعها في مكان واحد وإستدعائها منه حتى تسهل حل الخطأ والتعديل ويمكن حلها بطريقتين

إستخراج دالة وظيفية (Extract Method) : ويتم من خلال عمل دالة يوجد فيها نفس البناء البرمجي وإستدعائها بدل من البناء البرمجي المتكرر

 

extract method
extract method

 

 

سحب الدالة الوظيفية عند تكرارها في أبناء الصنف (Pull Up method) : عند وجود تكرار في أبناء الصنف فيمكن سحب الدالة ووضعها في الأب ليتمكن الأبناء من استدعائها

Pull Up Method
Pull Up Method

 

الدوال الوظيفية الطويلة (Long Methods) :  بالعادة من الصعب جدا فهم الدوال الطويلة بالذات أنها تكون متعددة الوظائف لذلك يمكن إستخراج دوال مثل فكرة Extract Method وإستدعائها في داخل الدالة الوظيفية

 

الصنف الطويل (Large Class) : عندما يحوي الصنف الكثير من التعليمات البرمجية , المتغيرات , التكرار ويمكن حل المشكلة بطريقتين حسب الحالة

إستخراج الصنف (Extract Class) : إذا وجدنا أنه يمكن وضع صنف منفصل لعمليات مخصصة يتم إستخراجه من الصنف الطويل وعمله كصنف مستقل ومن ثم تمريره إلى الصنف الطويل من خلال متغير

 

Extract Class
Extract Class

 

إستخراج ابن للصنف (Extract Subclass) : إذا كان بالإمكان عمل ابن للصنف بحيث يكون يعتمد على الصنف الطويل وبالتالي يورث كل المهام المطلوبة ويكون صنف مستقل بمهامه

Extract Subclass
Extract Subclass

طول المعاملات (Long Parameter List) : من الصعب فهم المعاملات الطويلة في الدوال , لذلك يتم إستبدال المعاملات الطويلة بدوال (Replace Parameter with Method)

void setValue (String name, int value) {

if (name.equals(“height”)) {
_height = value;
return;
}

if (name.equals(“width”)){
_width = value;
return;
}

}

حيث يمكن تحويل المعاملات إلى دوال مثل

void setHeight(int arg) {
_height = arg;
}
void setWidth (int arg) {
_width = arg;
}

سيكون لنا تكملة في المزيد من عمليات ال Refactoring ومناطق ال Code Smell

دمتم بود , إلى تدوينة أخرى

 

لا تعليقات

أترك رد