استخرج الواجهات (Extract Interface)

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

المشكلة

يستخدم العديد من العملاء نفس الجزء من واجهة الصنف. حالة أخرى: عندما يوجد نفس الجزء من الواجهة في صنفين.

الحل

نقل هذا الجزء المتطابق إلى الواجهة الخاصة به.

مثال

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

استخدام التابعين ()getRate و ()hasSpecialSkill في الصنف Employee بكثرة:
يستخدم العديد من العملاء نفس الجزء من واجهة الصنف.
يستخدم العديد من العملاء نفس الجزء من واجهة الصنف.

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

استخراج هذين التابعين إلى واجهة خاصة بهما تدعى Billable:
تقل هذا الجزء المتطابق إلى الواجهة الخاصة به.
تقل هذا الجزء المتطابق إلى الواجهة الخاصة به.

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

  1. تكون الواجهات مناسبة جدًا عندما تلعب الأصناف أدوارًا خاصة في حالات مختلفة. ويستخدم استخرج الواجهات لتحديد أي دور بوضوح.
  2. وتنشأ حالة مناسبة أخرى عندما تحتاج إلى وصف العمليات التي يجريها صنفُ ما على خادمه. إذا كان من المخطط أن يسمح في نهاية المطاف باستخدام خوادم من أنواع متعددة، يجب أن توفر كل الخوادم الواجهة.

من الجيد أن نعرف

هناك بعض التشابه بين استخراج الأصناف العليا واستخراج الواجهات.

يسمح استخراج الواجهات بعزل الواجهات المشتركة فقط، وليس الشيفرة المشتركة. وبعبارة أخرى، إذا احتوت الأصناف على شيفرة مكررة، فإن استخراج الواجهات لن يساعد على إزالة التكرار.

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

آلية الحل

  1. أنشئ واجهة فارغة.
  2. عرِّف العمليات المشتركة في الواجهة.
  3. عرِّف الأصناف اللازمة لتنفيذ الواجهة.
  4. غير نوع التعريفات في شيفرة العميل حتى يستخدم الواجهة الجديدة.

انظر أيضًا

مصادر