الروابط الازدواجية (Couplers)

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

يتلخّص هذا الجانب بعواقب إنشاء رابطٍ شديدٍ ازدواجيّ (ما بين صنفين [classes])، أو قد تظهر بدائل عنه كالتفويض المفرط (excessive delegation)، وتتمثل هذه المشكلة بالنقاط الآتية:

  1. التسلط على الكائنات الأخرى (feature envy)
    • المشكلة: استخدام بعضُ التوابع بياناتِ الكائنات الأخرى أكثر ممّا تستخدم بياناتِها ذاتَها.
    • الحل: إبقاء الأجزاء التي تتغيَّر بآنٍ واحدٍ في المكان ذاته معًا عبر نقلُ التوابع، أو استخراجُ التوابع.
  2. الارتباط الوثيق غير المناسب (inappropriate intimacy)
  3. أصناف المكتبة غير الكافية (incomplete library class)
  4. سلاسل الرسائل (message chains)
    • المشكلة: وجود العديد من الاستدعاءات المتسلسلة في الشيفرة، مثل: ‎$a->b()->c()->d()‎.
    • الحل: إخفاء التفويض لحذف الاستدعاءات المُتسلسلة، أو قد يُلجَأ في بعض الأحيان إلى استخراج تابعٍ يقوم بالمهمة ذاتها، أو الاعتماد على نقل التابع لجعل المهمّة في بداية سلسلة الاستدعاءات بدلًا من نهايتها.
  5. الوسيط (middle man)
    • المشكلة: عندما يكون للصنف مهمةٌ واحدةٌ فقط وهي تفويض المهام لصنفٍ آخر، فما أهمية وجوده بالأصل؟
    • الحل: حذف الوسيط إن كانت معظم أصناف التابع تفوِّض المهام إلى صنفٍ آخر.

انظر أيضًا

مصادر