---
title: "إخفاء المفوض"
type: "refactoring-technique"
slug: "hide-delegate"
url: "http://localhost:3000/ar/hide-delegate.md"
category: "نقل الميزات بين الكائنات"
description: "المشكلة: يحصل العميل على الكائن B من حقل أو دالة في الكائن A. ثم يقوم العميل باستدعاء دالة في الكائن B. الحل: أنشئ دالة جديدة في الفئة A تفوض الاستدعاء إلى الكائن B. الآن لا يعرف العميل الفئة B ولا يعتمد عليها."
---
# إخفاء المفوض

> المشكلة: يحصل العميل على الكائن B من حقل أو دالة في الكائن A. ثم يقوم العميل باستدعاء دالة في الكائن B. الحل: أنشئ دالة جديدة في الفئة A تفوض الاستدعاء إلى الكائن B. الآن لا يعرف العميل الفئة B ولا يعتمد عليها.

## المشكلة

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

## الحل

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

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

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

* _الخادم (Server)_ هو الكائن الذي يمتلك العميل وصولاً مباشراً إليه.
* _المفوض (Delegate)_ هو الكائن النهائي الذي يحتوي على الوظائف التي يحتاجها العميل.

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

## الفوائد

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

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

1. لكل دالة في _فئة المفوض_ يستدعيها العميل، أنشئ دالة في _فئة الخادم_ تفوض الاستدعاء إلى _فئة المفوض_.
2. قم بتغيير كود العميل بحيث يستدعي دوال _فئة الخادم_.
3. إذا كانت تغييراتك تغني العميل عن الحاجة إلى _فئة المفوض_، فيمكنك إزالة دالة الوصول إلى _فئة المفوض_ من _فئة الخادم_ (الدالة التي تم استخدامها في الأصل للحصول على _فئة المفوض_).
## Relations

**Opposite refactorings**

- [إزالة الوسيط (Remove Middle Man)](/ar/remove-middle-man.md)

**Eliminates smells**

- [سلاسل الرسائل](/ar/smells/message-chains.md)
- [الألفة غير اللائقة](/ar/smells/inappropriate-intimacy.md)

