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


##Why Refactor
أحد أكثر الأسباب شيوعًا لاستخدام كود النوع هو التعامل مع قواعد البيانات، عندما تحتوي قاعدة البيانات على حقول يتم فيها ترميز مفهوم معقد برقم أو سلسلة نصية.
على سبيل المثال، لديك فئة User بها حقل user_role يحتوي على معلومات حول صلاحيات الوصول لكل مستخدم، سواء كان مديرًا (administrator)، أو محررًا (editor)، أو مستخدمًا عاديًا (ordinary user). في هذه الحالة، يتم ترميز هذه المعلومات في الحقل كـ A و E و U على التوالي.
ما هي عيوب هذا النهج؟ غالبًا لا تتحقق دوال التعيين للحقل من القيمة المرسلة، مما قد يتسبب في مشاكل كبيرة عندما يرسل شخص ما قيمًا غير مقصودة أو خاطئة إلى هذه الحقول.
بالإضافة إلى ذلك، فإن التحقق من النوع مستحيل لهذه الحقول. حيث يمكن إرسال أي رقم أو سلسلة نصية إليها، وهو ما لن يتم التحقق من نوعه بواسطة بيئة التطوير (IDE) الخاصة بك، مما يسمح لبرنامجك بالعمل (ثم الانهيار لاحقًا).
##Benefits
-
نريد تحويل مجموعات القيم الأولية -وهي ما تمثله الأنواع المرمزة- إلى فئات كاملة مع كل المزايا التي توفرها البرمجة كائنية التوجه.
-
من خلال استبدال كود النوع بفئات، فإننا نسمح بالتلميح بالنوع (type hinting) للقيم الممررة إلى الدوال والحقول على مستوى لغة البرمجة.
على سبيل المثال، في حين أن المترجم لم يكن يرى سابقًا فرقًا بين ثابتك الرقمي ورقم عشوائي آخر عند تمرير قيمة إلى دالة، الآن عندما يتم تمرير بيانات لا تتطابق مع فئة النوع المحددة، فسيتم تحذيرك من الخطأ داخل بيئة التطوير (IDE) الخاصة بك.
-
وبذلك نجعل من الممكن نقل الكود إلى فئات هذا النوع. فإذا كنت بحاجة إلى إجراء عمليات معقدة على قيم النوع في كامل البرنامج، يمكن لهذا الكود الآن أن "يعيش" داخل فئة أو فئات نوع متعددة.
##How to Refactor
-
أنشئ فئة جديدة وامنحها اسمًا جديدًا يتوافق مع الغرض من النوع المرمز. سنطلق عليها هنا اسم فئة النوع (type class).
-
انسخ الحقل الذي يحتوي على كود النوع إلى فئة النوع واجعله خاصًا (private). ثم أنشئ دالة جلب (getter) للحقل. سيتم تعيين قيمة لهذا الحقل فقط من خلال الباني (constructor).
-
لكل قيمة من قيم النوع المرمز، أنشئ دالة ثابتة (static method) في فئة النوع. ستقوم بإنشاء كائن جديد من فئة النوع يتوافق مع هذه القيمة للنوع المرمز.
-
في الفئة الأصلية، استبدل نوع الحقل المرمز بـ فئة النوع. أنشئ كائنًا جديدًا من هذا النوع في الباني وكذلك في دالة التعيين الخاصة بالحقل. قم بتغيير دالة جلب الحقل بحيث تستدعي دالة جلب فئة النوع.
-
استبدل أي إشارة إلى قيم النوع المرمز باستدعاءات للدوال الثابتة ذات الصلة في فئة النوع.
-
أزل ثوابت النوع المرمز من الفئة الأصلية.