استخرج الواجهات (Extract Interface)
المشكلة
يستخدم العديد من العملاء نفس الجزء من واجهة الصنف. حالة أخرى: عندما يوجد نفس الجزء من الواجهة في صنفين.
الحل
نقل هذا الجزء المتطابق إلى الواجهة الخاصة به.
مثال
قبل إعادة التصميم
استخدام التابعين ()getRate
و ()hasSpecialSkill
في الصنف Employee
بكثرة:
بعد إعادة التصميم
استخراج هذين التابعين إلى واجهة خاصة بهما تدعى Billable
:
لم إعادة التصميم؟
- تكون الواجهات مناسبة جدًا عندما تلعب الأصناف أدوارًا خاصة في حالات مختلفة. ويستخدم استخرج الواجهات لتحديد أي دور بوضوح.
- وتنشأ حالة مناسبة أخرى عندما تحتاج إلى وصف العمليات التي يجريها صنفُ ما على خادمه. إذا كان من المخطط أن يسمح في نهاية المطاف باستخدام خوادم من أنواع متعددة، يجب أن توفر كل الخوادم الواجهة.
من الجيد أن نعرف
هناك بعض التشابه بين استخراج الأصناف العليا واستخراج الواجهات.
يسمح استخراج الواجهات بعزل الواجهات المشتركة فقط، وليس الشيفرة المشتركة. وبعبارة أخرى، إذا احتوت الأصناف على شيفرة مكررة، فإن استخراج الواجهات لن يساعد على إزالة التكرار.
ومع ذلك، يمكن تخفيف هذه المشكلة بتطبيق استخراج الأصناف لنقل السلوك الذي يحتوي على التكرار إلى عنصرٍ منفصل وتفويضه بكل العمل. إذا كان السلوك المشترك كبيرًا في الحجم، يمكن دائمًا استخدام استخراج الأصناف العليا. وهو أسهل بالطبع، لكن تذكَّر أنه إذا سلكت هذا الطريق، فستحصل على صنف أصل واحدٍ فقط.
آلية الحل
- أنشئ واجهة فارغة.
- عرِّف العمليات المشتركة في الواجهة.
- عرِّف الأصناف اللازمة لتنفيذ الواجهة.
- غير نوع التعريفات في شيفرة العميل حتى يستخدم الواجهة الجديدة.