دفع التابع لأسفل (Push Down Method)

من موسوعة حسوب
< Refactoring
مراجعة 09:56، 26 فبراير 2019 بواسطة جميل-بيلوني (نقاش | مساهمات) (مراجعة وتدقيق.)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

المشكلة

هل السلوك المُنفَّذ في الصنف الأب مُستخدمٌ في صنف فرعي واحد فقط (أو أكثر)؟

الحل

نقل هذا السلوك إلى الأصناف الفرعية.

مثال

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

التابع ()getFuel الموجود في الصنف Unit الأب مُستخدم في صنف فرعي واحد فقط الذي هو Tank:

التابع الموجود في الصنف الفائق مُستخدم في صنف فرعي واحد فقط.
التابع الموجود في الصنف الأب مُستخدم في صنف فرعي واحد فقط.

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

نقل التابع ()getFuel من الصنف الأب إلى الصنف الفرعي المستخدم فيه:

نقل هذا التابع إلى الصنف الفرعي الذي يُستخدم فيه.
نقل هذا التابع إلى الصنف الفرعي الذي يُستخدم فيه.

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

في البداية كان من المفترض أن يكون تابعٌ معينٌ عامًا لجميع الأصناف ولكنه لم يستخدم في الواقع إلا في صنف فرعي واحد. ويمكن أن تحدث هذه الحالة عندما لا تتحقق المميزات المخطط لها.

ويمكن أن تحدث مثل هذه الحالات أيضًا بعد الاستخراج الجزئي (أو إزالة) الوظائف من التسلسل الهرمي للصنف، مما يترك تابعًا مُستخدمًا في صنفٍ فرعيٍ واحدٍ فقط.

إذا كنت ترى تابعًا مطلوبًا من قِبَل أكثر من صنفٍ فرعيٍ واحد، ولكن ليس كل الأصناف الفرعية، قد يكون من المفيد إنشاء صنف فرعي وسيط ونقل التابع إليه. يسمح هذا بتجنب تكرار الشيفرة الذي من شأنه أن ينتج عن دفع التابع للأسفل لجميع الأصناف الفرعية.

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

  • يُحسِّن من تماسك الصنف. يتواجد التابع حيث يكون متوقعًا أن يكون.

آلية الحل

  1. عرِّف التابع في صنف فرعي وانسخ شيفرته من الصنف الأب.
  2. أزِل التابع من الصنف الأب.
  3. ابحث عن كل الأماكن التي يستخدم فيها التابع وتأكد من أنه يُستدعى من الصنف الفرعي اللازم.

انظر أيضًا

مصادر