TOP
ما هي إعادة الهيكلة؟
وصف
إعادة بناء التعليمات البرمجية (Refactoring) – التغييرات التي يتم إجراؤها على البنية الداخلية للبرمجيات (البرمجيات) لتسهيل الفهم وأسرع في التعديل دون تغيير السلوك الخارجي. كما أنها عبارة عن إعادة هيكلة للبرنامج من خلال تطبيق سلسلة من عمليات إعادة الهيكلة دون تغيير السلوك الخارجي للبرنامج.
مزايا إعادة الهيكلة:
- إعادة البناء تعمل على تحسين تصميم البرمجيات. بمرور الوقت، يتم إجراء العديد من التغييرات الإضافية على التعليمات البرمجية ويفقد البرنامج هيكله بمرور الوقت. فقدان الهيكل له تأثير تراكمي. كلما كان من الصعب رؤية التصميم في الكود، كلما كان من الصعب الاحتفاظ به وانهياره بشكل أسرع. كما أن مثل هذه التغييرات تتسبب في تكرار التعليمات البرمجية وتكرارها، مما يزيد من صعوبة فهم النظام وتعديله.
- إعادة البناء تجعل كود البرنامج أكثر قابلية للفهم.
عندما تحتاج إلى القيام بإعادة الهيكلة:
- عند إضافة ميزة جديدة؛
- عندما يتم تصحيح خطأ (ثابت)؛
- أثناء مراجعة الكود.
الروائح الكريهة في الكود (Smells Catalog) :
- ازدواجية الكود
- طريقة طويلة
- فئة كبيرة
- قائمة طويلة من المعلمات
- تعديلات متباينة
- إطلاق النار
- ميزات حسود
- كتل من البيانات
- الهوس بأنواع العناصر
- Switch العاملين
- التسلسلات الهرمية الموازية للتقليد
- فئة كسول
- المجتمع التأملي (النظري).
- المجال المؤقت
- مواضيع الرسالة
- عامل
- القرب غير المناسب
- فئات بديلة مع واجهات مختلفة
- فئة مكتبة غير مكتملة
- فئات البيانات
- تعليقات
خيارات إعادة الهيكلة الممكنة
-
Moving Features Between Objects (نقل التعليمات البرمجية الكامل بين الكائنات):
- Move Method (ركز على الطريقة) - عزل طريقة منفصلة إذا كانت الطريقة طويلة جدًا أو تحتوي على تعليمات بلغة تتطلب تعليقات.
- Move Field (المجال المتحكر) - يتم عندما يتم استعمال الحق من قبل فئة أخرى أكثر من المكان المحدد فيه.
-
Organizing Data (ترتيب البيانات):
- Encapsulate Field (إعادة التدوير) - أحد المبادئ الأساسية في OOP هو تغليف البيانات أو إخفاؤها. ومن خلال جعل البيانات عامة، يمكن للكائنات قراءة القيم وتغييرها دون علم صاحب البيانات. لذلك، نجعل مسل هذا الحقل مغلقًا ونوفر ترقق حرقة.
- Encapsulate Collection (التغليف الجماعي) - يحتوي الفصل غالبًا على مجموعة من العينات. يمكن أن تكون هذه المجموعة مصفوفة، أو قائمة، أو مجموعة، أو متجهًا. يجب ألا يُرجع التابع getter كائن المجموعة نفسه، لأن ذلك سيسمح للعملاء بتعديل محتويات المجموعة دون معرفة الفئة التي تمتلكها. لذلك، تحتاج إلى جعل القيمة التي يتم إرجاعها بواسطة الطريقة للقراءة فقط وإنشاء طرق لإضافة/إزالة العناصر.
-
Composing Methods (استخراج ودمج الكود):
- Extract Method (ركز على الطريقة) – إذا كان هناك قطعة من الكود يمكن تجميعها، ضع تلك القطعة في طريقة منفصلة باسم يوضح الغرض منها. وهكذا، فان اسم الترجمة سوف يحل محل المعلومات.
- Inline Method (تريكة التمسين) - في بعض الأحيان يكون من الضروري نسخ نص الطريقة إلى الكود المطلوب. في بعض الأحيان تكون كائنات الطريقة واضحة بذاتها، مثل اسم الطريقة نفسها. قد يكون هناك أيضًا موقف عندما يكون هناك العديد من الطرق المختلفة، والتي لا يكون هيكلها ناجحًا، لذا من الأفضل دمجها جميعًا بطريقة عامة واحدة، ثم فصل الطرق بطريقة أخرى.
- Inline Temp (أدخل متغير متغير) - استخدم هذه العناصر البسيطة عبر الإنترنت. في بعض الأحيان يتداخل هذا المتغير مع عمليات إعادة البناء الأخرى.
- Replace Temp with Query (استبدال متغير مؤقت بطلب الطريقة) - يستخدم عند استخدام متغير مؤقت لتخزين قيمة التعبير. في هذه الحالة، سنقوم باستبدال التعبير بالطريقة واستبدال جميع المراجع في الكود لهذا المتغير بالطريقة الجديدة.
- Split Temporary Variable (متغير القسم مؤقت) - ينطبق إذا تم استخدام متغير متغير لتعيين نتائج متعددة لنتائج مختلفة. في هذه الحالة، نقوم بإنشاء متغير منفصل لكل مهمة.
-
Simplifying Conditional Expressions (تبسيت العبارات بالشروط):
- Decompose Conditional (تحليل العمل الشني) – يتم تعريفة هناك يكون يدون سيرة شرطية من الشيكات (إذا-ثم-إلا). نستبدل بنجاح (إذا)، ومنتج من ثم، وإلا بطرق ووصفة. فهو يساهم في فهم سبب التفرع بطريقة أفضل، ويشرح أسماء المسارات والغرض من الجزء المقابل من كود البرمجة.
- Consolidate Conditional Expression (توهيد الإجموع التركي) - يتم إجراوه يتم إجراوه يديم كان هدا كان تدرب من فحوصات استماء تيتم إجراوه يتم إجراوه ثيم كان هدا تدرب من فوسائة تيتم إجراوه أيتم إجراوه يتم إجراوه يتم إجراوه يتم إجراوه يتم إجراوه ثيم كان هذا تدرب من فحوصات تحديد التحميل. تحتاج إلى دمج جميع عمليات التحقق في تعبير أو نمط الوحدة الشرطية.
- Consolidate Duplicate Conditional Fragments (توحيد أجزاء القانون) - نفس الجزء موجود في جميع فروع التعبير القانوني. تحتاج إلى نسخ هذا الجزء من الكود من الكود.
- Remove Control Flag (إزالة علامة الاختيار) - يوجد متغير يعمل كرمز تحكم لسلسلة من التعبيرات المنطقية. نحن لا نستخدم الراحة أو العودة بدلا من ذلك.
- Replace Conditional with Polymorphism (استبدال ضابط الشرطة بأشكال متعددة) - يتم تنفيذه عند وجود وكيل شرطي يعتمد على سلوك الكائن. من الضروري نسخ كل الفرع من فرع العامل إلى فرع الشركة التابعة. اجعل الكود المصدر مقدراًا.