---
title: "إزالة الوسيط (Remove Middle Man)"
type: "refactoring-technique"
slug: "remove-middle-man"
url: "http://localhost:3000/ar/remove-middle-man.md"
category: "نقل الميزات بين الكائنات"
description: "المشكلة: تحتوي الفئة على عدد كبير جداً من التوابع التي تقوم ببساطة بالتفويض لكائنات أخرى. الحل: احذف هذه التوابع واجبر العميل على استدعاء التوابع النهائية مباشرة."
---
# إزالة الوسيط (Remove Middle Man)

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

## المشكلة

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

## الحل

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

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

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

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

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

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

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

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

**Opposite refactorings**

- [إخفاء المفوض](/ar/hide-delegate.md)

**Eliminates smells**

- [الوسيط](/ar/smells/middle-man.md)

