---
title: "نقل التابع (Move Method)"
type: "refactoring-technique"
slug: "move-method"
url: "http://localhost:3000/ar/move-method.md"
category: "نقل الميزات بين الكائنات"
description: "المشكلة: يتم استخدام تابع في فئة أخرى أكثر من استخدامه في الفئة الخاصة به. الحل: أنشئ تابعاً جديداً في الفئة التي تستخدم التابع بشكل أكبر، ثم انقل الكود من التابع القديم إلى هناك. حوّل كود التابع الأصلي إلى إشارة مرجعية للتابع الجديد في الفئة الأخرى أو احذفه تماماً."
---
# نقل التابع (Move Method)

> المشكلة: يتم استخدام تابع في فئة أخرى أكثر من استخدامه في الفئة الخاصة به. الحل: أنشئ تابعاً جديداً في الفئة التي تستخدم التابع بشكل أكبر، ثم انقل الكود من التابع القديم إلى هناك. حوّل كود التابع الأصلي إلى إشارة مرجعية للتابع الجديد في الفئة الأخرى أو احذفه تماماً.

## المشكلة

يتم استخدام تابع في فئة أخرى أكثر من استخدامه في الفئة الخاصة به.

## الحل

أنشئ تابعاً جديداً في الفئة التي تستخدم التابع بشكل أكبر، ثم انقل الكود من التابع القديم إلى هناك. حوّل كود التابع الأصلي إلى إشارة مرجعية للتابع الجديد في الفئة الأخرى أو احذفه تماماً.

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

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

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

1. تحقق من جميع الميزات (Features) التي يستخدمها التابع القديم في فئته. قد تكون فكرة جيدة أن تنقلها هي الأخرى أيضاً. كقاعدة عامة، إذا كانت الميزة مستخدمة فقط بواسطة التابع قيد النظر، فيجب عليك بالتأكيد نقل هذه الميزة إليه. أما إذا كانت الميزة مستخدمة من قبل توابع أخرى أيضاً، فيجب عليك نقل تلك التوابع كذلك. في بعض الأحيان، يكون من الأسهل بكثير نقل عدد كبير من التوابع بدلاً من إقامة علاقات بينها في فئات مختلفة.
تأكد من أن التابع غير مصرح به في الفئات الفائقة (Superclasses) والفئات الفرعية (Subclasses). فإذا كان الأمر كذلك، فسيتعين عليك إما الامتناع عن النقل أو تطبيق نوع من تعدد الأشكال (Polymorphism) في الفئة المستقبِلة لضمان تباين وظائف التابع الموزعة بين الفئات الواهبة.
2. صرح بالتابع الجديد في الفئة المستقبِلة. قد ترغب في إعطاء اسم جديد للتابع يكون أكثر ملاءمة له في الفئة الجديدة.
3. حدد كيفية الإشارة إلى الفئة المستقبِلة. قد يكون لديك بالفعل حقل أو تابع يعيد كائناً مناسباً، وإذا لم يكن كذلك، فستحتاج إلى كتابة تابع أو حقل جديد لتخزين كائن الفئة المستقبِلة.
الآن لديك طريقة للإشارة إلى كائن المستقبِل وتابع جديد في فئته. وبوجود كل هذا، يمكنك تحويل التابع القديم إلى مجرد إشارة مرجعية للتابع الجديد.
4. ألقِ نظرة: هل يمكنك حذف التابع القديم تماماً؟ إذا كان الأمر كذلك، فضع إشارة مرجعية للتابع الجديد في جميع الأماكن التي تستخدم التابع القديم.
## Relations

**Helps you do**

- [استخراج الفئة](/ar/extract-class.md)
- [تضمين الفئة](/ar/inline-class.md)
- [إدخال كائن المعاملات (Introduce Parameter Object)](/ar/introduce-parameter-object.md)

**Similar techniques**

- [استخراج الدالة](/ar/extract-method.md)
- [نقل الحقل (Move Field)](/ar/move-field.md)

**Eliminates smells**

- [الجراحة بالخردق (Shotgun Surgery)](/ar/smells/shotgun-surgery.md)
- [الحسد على الميزات](/ar/smells/feature-envy.md)
- [عبارات Switch](/ar/smells/switch-statements.md)
- [تدرجات الوراثة المتوازية](/ar/smells/parallel-inheritance-hierarchies.md)
- [سلاسل الرسائل](/ar/smells/message-chains.md)
- [الألفة غير اللائقة](/ar/smells/inappropriate-intimacy.md)
- [كلاس البيانات](/ar/smells/data-class.md)

