---
title: "استبدال كود النوع بفئة"
type: "refactoring-technique"
slug: "replace-type-code-with-class"
url: "http://localhost:3000/ar/replace-type-code-with-class.md"
category: "تنظيم البيانات"
description: "المشكلة: تحتوي فئة ما على حقل يحتوي على كود نوع (type code). قيم هذا النوع لا تُستخدم في شروط العوامل ولا تؤثر على سلوك البرنامج. الحل: قم بإنشاء فئة جديدة واستخدم كائناتها بدلاً من قيم كود النوع."
---
# استبدال كود النوع بفئة

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

## المشكلة

تحتوي فئة ما على حقل يحتوي على كود نوع. قيم هذا النوع لا تُستخدم في شروط العوامل ولا تؤثر على سلوك البرنامج.

## الحل

قم بإنشاء فئة جديدة واستخدم كائناتها بدلاً من قيم كود النوع.

## لماذا نقوم بإعادة الهيكلة

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

على سبيل المثال، لديك فئة `User` بها حقل `user_role` يحتوي على معلومات حول صلاحيات الوصول لكل مستخدم، سواء كان مديرًا (administrator)، أو محررًا (editor)، أو مستخدمًا عاديًا (ordinary user). في هذه الحالة، يتم ترميز هذه المعلومات في الحقل كـ `A` و `E` و `U` على التوالي.

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

بالإضافة إلى ذلك، فإن التحقق من النوع مستحيل لهذه الحقول. حيث يمكن إرسنال أي رقم أو سلسلة نصية إليها، وهو ما لن يتم التحقق من نوعه بواسطة بيئة التطوير (IDE) الخاصة بك، مما يسمح لبرنامجك بالعمل (ثم الانهيار لاحقًا).

## الفوائد

* نريد تحويل مجموعات القيم الأولية -وهي ما تمثله الأنواع المرمزة- إلى فئات كاملة مع كل المزايا التي توفرها البرمجة كائنية التوجه.
* من خلال استبدال كود النوع بفئات، فإننا نسمح بالتلميح بالنوع (type hinting) للقيم الممررة إلى الدوال والحقول على مستوى لغة البرمجة.
على سبيل المثال، في حين أن المترجم لم يكن يرى سابقًا فرقًا بين ثابتك الرقمي ورقم عشوائي آخر عند تمرير قيمة إلى دالة، الآن عندما يتم تمرير بيانات لا تتطابق مع فئة النوع المحددة، فسيتم تحذيرك من الخطأ داخل بيئة التطوير (IDE) الخاصة بك.
* وبذلك نجعل من الممكن نقل الكود إلى فئات هذا النوع. فإذا كنت بحاجة إلى إجراء عمليات معقدة على قيم النوع في كامل البرنامج، يمكن لهذا الكود الآن أن "يعيش" داخل فئة أو فئات نوع متعددة.

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

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

**Similar techniques**

- [استبدال كود النوع بفئات فرعية](/ar/replace-type-code-with-subclasses.md)
- [استبدال كود النوع بالحالة/الاستراتيجية](/ar/replace-type-code-with-state-strategy.md)

**Eliminates smells**

- [الهوس بالأنواع الأساسية](/ar/smells/primitive-obsession.md)

