الفرق بين المراجعتين ل"Refactoring/inline method"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(إنشاء الصفحة. هذه الصفحة من مساهمات "نور تامر".)
 
ط
سطر 9: سطر 9:
  
 
=== قبل إعادة التصميم ===
 
=== قبل إعادة التصميم ===
نلاحظ أن محتوى التابع <code>moreThanFiveLateDeliveries()‎</code> واضحٌ وبسيطٌ لدرجةٍ تجعل الاستغناء عنه ممكنًا:<syntaxhighlight lang="jave">
+
نلاحظ أن محتوى التابع <code>moreThanFiveLateDeliveries()‎</code> واضحٌ وبسيطٌ لدرجةٍ تجعل الاستغناء عنه ممكنًا:<syntaxhighlight lang="java">
 
class PizzaDelivery {
 
class PizzaDelivery {
 
   //...
 
   //...
سطر 23: سطر 23:
  
 
=== بعد إعادة التصميم ===
 
=== بعد إعادة التصميم ===
سيُستبدَل استدعاءُ التابع ليحلَّ محتوى التابع محلَّه بالشكل:<syntaxhighlight lang="jave">
+
سيُستبدَل استدعاءُ التابع ليحلَّ محتوى التابع محلَّه بالشكل:<syntaxhighlight lang="java">
 
class PizzaDelivery {
 
class PizzaDelivery {
 
   //...
 
   //...

مراجعة 15:20، 11 نوفمبر 2018

المشكلة

أن يكون محتوى التابع (method body) بسيطًا وواضحًا أكثر من التابع بحدِّ ذاته، ويمكن عندئذٍ الاستغناء عنه.

الحل

نقل الشيفرة الموجودة في التابع (محتوى التابع) إلى مواقع استدعائه، وحذف التابع برمته إذ لا داعي له.

مثال

قبل إعادة التصميم

نلاحظ أن محتوى التابع moreThanFiveLateDeliveries()‎ واضحٌ وبسيطٌ لدرجةٍ تجعل الاستغناء عنه ممكنًا:

class PizzaDelivery {
  //...
  int getRating() {
    return moreThanFiveLateDeliveries() ? 2 : 1;
  }
  boolean moreThanFiveLateDeliveries() {
    return numberOfLateDeliveries > 5;
  }
}

بعد إعادة التصميم

سيُستبدَل استدعاءُ التابع ليحلَّ محتوى التابع محلَّه بالشكل:

class PizzaDelivery {
  //...
  int getRating() {
    return numberOfLateDeliveries > 5 ? 2 : 1;
  }
}

لم إعادة التصميم؟

عندما يُفضي (delegate) التابع إلى تابعٍ آخر فلا مشكلة بهذا المنطق بحدِّ ذاته، ولكن تنجم المشكلة عندما يكون هنالك الكثير من هذه التوابع غير المجدية، إذ لا تكون هذه التوابع قصيرةً بادئ الأمر، ولكنها تصبح كذلك بعد الكثير من التعديلات التي تطرأ على البرنامج، والأولى التخلُّص منها فهي بلا فائدة مرجوَّة.

فوائد تطبيق الحل

جعل الشيفرة أكثر وضوحًا بتقليل عدد التوابع غير المفيدة فيها.

آلية الحل

  1. التأكُّد من أنّ التابع لا يُعاد تعريفه في أيّ من الأصناف الفرعية (subclasses)، فإن كان مُعرَّفًا فعليك العزوف عن دمج التابع.
  2. إيجاد كافّة استدعاءات هذا التابع في الشيفرة وتبديلها إلى محتواه الفعليّ.
  3. حذف التابع.

انظر أيضًا

مصادر