شعار ConstructiCat
CodeBust.
تصفح القسم ▾

إزالة الوسيط (Remove Middle Man).

المشكلة

تحتوي الفئة على عدد كبير جداً من التوابع التي تقوم ببساطة بالتفويض لكائنات أخرى.

الحل

احذف هذه التوابع واجبر العميل على استدعاء التوابع النهائية مباشرة.

##مثال

قبل
class Person {
  Person getManager() { return department.getManager(); }
}
بعد
class Person {
  Department getDepartment() { return department; }
}
manager = person.getDepartment().getManager();

##لماذا نعيد الهيكلة

لوصف هذه التقنية، سنستخدم المصطلحات من تقنية إخفاء المفوض (Hide Delegate)، وهي:

  • الخادم (Server) هو الكائن الذي يمتلك العميل حق الوصول المباشر إليه.

  • المفوض (Delegate) هو الكائن النهائي الذي يحتوي على الوظائف التي يحتاجها العميل.

هناك نوعان من المشاكل:

  1. لا تقوم فئة الخادم بأي عمل بنفسها وتتسبب ببساطة في تعقيد غير ضروري. في هذه الحالة، فكر ملياً فيما إذا كانت هذه الفئة مطلوبة على الإطلاق.

  2. في كل مرة تتم فيها إضافة ميزة جديدة إلى المفوض، تحتاج إلى إنشاء تابع تفويض لها في فئة الخادم. وإذا تم إجراء الكثير من التغييرات، فسيكون هذا أمراً متعباً للغاية.

##كيفية إعادة الهيكلة

  1. أنشئ تابع جلب (Getter) للوصول إلى كائن فئة التفويض (Delegate class) من كائن فئة الخادم (Server class).

  2. استبدل استدعاءات التوابع المفوضة في فئة الخادم باستدعاءات مباشرة للتوابع في فئة التفويض.