ConstructiCat Logo
CodeBust.
Browse section ▾

إخفاء المفوض.

Problem

يحصل العميل على الكائن B من حقل أو دالة في الكائن A. ثم يقوم العميل باستدعاء دالة في الكائن B.

Solution

أنشئ دالة جديدة في الفئة A تفوض الاستدعاء إلى الكائن B. الآن لا يعرف العميل الفئة B ولا يعتمد عليها.

##Example

قبل
Hide Delegate - Before
بعد
Hide Delegate - After

##Why Refactor

بادئ ذي بدء، دعنا نلقي نظرة على المصطلحات:

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

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

تظهر سلسلة الاستدعاءات (call chain) عندما يطلب العميل كائناً من كائن آخر، ثم يطلب الكائن الثاني كائناً آخر، وهكذا. هذه السلاسل من الاستدعاءات تشرك العميل في التنقل عبر هيكل الفئات. وسيتطلب أي تغيير في هذه العلاقات المتبادلة تغييرات في جانب العميل.

##Benefits

  • يخفي التفويض عن العميل. كلما قل ما يحتاج كود العميل لمعرفته حول تفاصيل العلاقات بين الكائنات، أصبح من الأسهل إجراء تغييرات على برنامجك.

##How to Refactor

  1. لكل دالة في فئة المفوض (delegate-class) يستدعيها العميل، أنشئ دالة في فئة الخادم (server-class) تفوض الاستدعاء إلى فئة المفوض.

  2. قم بتغيير كود العميل بحيث يستدعي دوال فئة الخادم.

  3. إذا كانت تغييراتك تغني العميل عن الحاجة إلى فئة المفوض، فيمكنك إزالة دالة الوصول إلى فئة المفوض من فئة الخادم (الدالة التي تم استخدامها في الأصل للحصول على فئة المفوض).