سحب التابع لأعلى (Pull Up Method)

من موسوعة حسوب
< Refactoring
مراجعة 10:44، 17 فبراير 2019 بواسطة Khaled-yassin (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: سحب التابع لأعلى (Pull Up Method)}}</noinclude> == المشكلة == تحتوي الأصناف الفرعية على توابع...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

المشكلة

تحتوي الأصناف الفرعية على توابع تؤدي نفس العمل.

الحل

جعل التوابع متطابقة ثم نقلها إلى الصنف الفائق ذي الصلة.

مثال

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

تحتوي الأصناف الفرعية على التابع getHealth تؤدي نفس العمل.
تحتوي الأصناف الفرعية على التابع getHealth تؤدي نفس العمل.

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

نقل التابع getHealth إلى الصنف الفائق.
نقل التابع getHealth إلى الصنف الفائق.

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

تنمو الأصناف الفرعية وتتطور بشكل مستقل عن بعضها البعض، مما يتسبب في ظهور حقول وتوابع متطابقة (أو شبه متطابقة).

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

  • التخلص من تكرار الشيفرة. إذا كنت بحاجة إلى إجراء تغييرات على تابع ما، فمن الأفضل أن تفعل ذلك في مكان واحد من أن تبحث عن جميع نسخ التابع في الأصناف الفرعية.
  • ويمكن أيضا استخدام تقنية إعادة التصميم هذه إذا أعاد صنفٌ فرعي تعريف تابع الأصناف الفائقة، لسبب ما، ولكنه يؤدي نفس العمل في الأساس.

آلية الحل

  1. تحقق من التوابع المماثلة في الأصناف الفائقة. إذا لم تكن متطابقة، قم بتنسيقها لتتطابق مع بعضها البعض.
  2. إذا استخدَمت التوابعُ مجموعة مختلفة من المعاملات، ضع المعاملات في الشكل الذي تريد رؤيته في الصنف الفائق.
  3. انسخ التابع إلى الصنف الفائق. هنا قد تجد أن شيفرة التابع تستخدم الحقول والتوابع التي توجد فقط في الأصناف الفرعية وبالتالي ليست متاحة في الصنف الفائق. ولحل هذا، يمكنك:
    • بالنسبة للحقول: استخدم إما سحب الحقل لأعلى أو التغليف الداخلي للحقول لإنشاء المُتلقيات والضوابط في الأصناف الفرعية؛ ثم عرِّف هذه المُتلقيات بشكل تجريدي في الأصناف الفائقة.
    • بالنسبة للتوابع: استخدام إما سحب التابع أو عرِّف لهم تابع مجرد في الصنف الفائق (لاحظ أن الصنف سيصبح مجردًا إذا لم يكن كذلك مسبقًا).
  4. أزِل التابع من الصنف الفرعي.
  5. تحقق من المواقع التي يستدعى فيها التابع. في بعض الأماكن قد تكون قادرا على استبدال استخدام الصنف الفرعي بالصنف الفائق.

انظر أيضًا

مصادر