---
title: "استبدال كود النوع بالحالة/الاستراتيجية"
type: "refactoring-technique"
slug: "replace-type-code-with-state-strategy"
url: "http://localhost:3000/ar/replace-type-code-with-state-strategy.md"
category: "تنظيم البيانات"
description: "المشكلة: لديك نوع مرمز يؤثر على السلوك ولكن لا يمكنك استخدام فئات فرعية للتخلص منه. الحل: استبدل كود النوع بكائن حالة (state object). إذا كان من الضروري استبدال قيمة حقل بكود نوع، يتم \"توصيل\" كائن حالة آخر."
---
# استبدال كود النوع بالحالة/الاستراتيجية

> المشكلة: لديك نوع مرمز يؤثر على السلوك ولكن لا يمكنك استخدام فئات فرعية للتخلص منه. الحل: استبدل كود النوع بكائن حالة (state object). إذا كان من الضروري استبدال قيمة حقل بكود نوع، يتم "توصيل" كائن حالة آخر.

## المشكلة

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

## الحل

استبدل كود النوع بكائن حالة. إذا كان من الضروري استبدال قيمة حقل بكود نوع، يتم "توصيل" كائن حالة آخر.

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

لديك كود نوع يؤثر على سلوك فئة ما، وبالتالي لا يمكننا استخدام [استبدال كود النوع بفئة](/replace-type-code-with-class).

يؤثر كود النوع على سلوك فئة ما ولكن لا يمكننا إنشاء فئات فرعية للنوع المرمز بسبب التسلسل الهرمي للفئة الحالية أو لأسباب أخرى. هذا يعني أنه لا يمكننا تطبيق تقنية [استبدال كود النوع بفئات فرعية](/replace-type-code-with-subclasses).

## الفوائد

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

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

1. استخدم [التغليف الذاتي للحقل](/self-encapsulate-field) لإنشاء دالة جلب للحقل الذي يحتوي على كود النوع.
2. أنشئ فئة جديدة وامنحها اسمًا مفهومًا يتناسب مع الغرض من كود النوع. ستلعب هذه الفئة دور _الحالة_ (أو _الاستراتيجية_). فيها، قم بإنشاء دالة جلب مجردة للحقل المرمز.
3. أنشئ فئات فرعية لفئة الحالة لكل قيمة من قيم النوع المرمز. في كل فئة فرعية، أعد تعريف دالة جلب الحقل المرمز بحيث تعيد القيمة المقابلة للنوع المرمز.
4. في فئة الحالة المجردة، أنشئ دالة مصنع ثابتة تقبل قيمة النوع المرمز كمعامل. بناءً على هذا المعامل، ستقوم دالة المصنع بإنشاء كائنات من حالات مختلفة. ولهذا الغرض، قم بإنشاء جملة شرطية كبيرة داخلها؛ وستكون هي الوحيدة المتبقية عند اكتمال إعادة الهيكلة.
5. في الفئة الأصلية، قم بتغيير نوع الحقل المرمز إلى فئة الحالة. في دالة تعيين الحقل، استدعِ دالة مصنع الحالة للحصول على كائنات حالة جديدة.
6. الآن يمكنك البدء في نقل الحقول والدوال من الفئة الفائقة إلى الفئات الفرعية المقابلة للحالة (باستخدام [إنزال الحقل](/push-down-field) و [إنزال الدالة](/push-down-method)).
7. عندما يتم نقل كل ما يمكن نقله، استخدم [استبدال الشرط بتعدد الأشكال](/replace-conditional-with-polymorphism) للتخلص من الجمل الشرطية التي تستخدم كود النوع مرة واحدة وإلى الأبد.
## Relations

**Similar techniques**

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

**Eliminates smells**

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

