استخراج الفئة.
عندما تقوم فئة واحدة بعمل فئتين، ينتج عن ذلك ارتباك وتعقيد.
بدلاً من ذلك، أنشئ فئة جديدة وضع فيها الحقول والدوال المسؤولة عن الوظائف ذات الصلة.
##Example


##Why Refactor
تبدأ الفئات دائماً واضحة وسهلة الفهم. تؤدي عملها وتهتم بشؤونها الخاصة، دون التدخل في عمل الفئات الأخرى. ولكن مع توسع البرنامج، يتم إضافة دالة ثم حقل... وفي النهاية، تؤدي بعض الفئات مسؤوليات أكثر مما كان متوقعاً لها في أي وقت مضى.
##Benefits
-
تساعد تقنية إعادة الهيكلة هذه في الحفاظ على الالتزام بـ مبدأ المسؤولية الفردية. سيكون كود فئاتك أكثر وضوحاً وفهماً.
-
الفئات ذات المسؤولية الفردية أكثر موثوقية وتسامحاً مع التغييرات. على سبيل المثال، لنفترض أن لديك فئة مسؤولة عن عشرة أشياء مختلفة. عندما تقوم بتغيير هذه الفئة لتحسينها لشيء واحد، فإنك تخاطر بكسرها للأشياء التسعة الأخرى.
##How to Refactor
قبل البدء، حدد كيف تريد تقسيم مسؤوليات الفئة بالضبط.
-
أنشئ فئة جديدة لاحتواء الوظائف ذات الصلة.
-
أنشئ علاقة بين الفئة القديمة والفئة الجديدة. من الأفضل أن تكون هذه العلاقة أحادية الاتجاه؛ مما يسمح بإعادة استخدام الفئة الثانية دون أي مشاكل. ومع ذلك، إذا كنت ترى أن هناك حاجة لعلاقة ثنائية الاتجاه، فيمكن إعدادها دائماً.
-
استخدم طريقة نقل الحقل و نقل الدالة لكل حقل ودالة قررت نقلهما إلى الفئة الجديدة. بالنسبة للدوال، ابدأ بالدوال الخاصة (private) لتقليل مخاطر حدوث عدد كبير من الأخطاء. حاول النقل شيئاً فشيئاً واختبر النتائج بعد كل عملية نقل، لتجنب تراكم الأخطاء وتصحيحها في النهاية.
بعد الانتهاء من النقل، ألقِ نظرة أخرى على الفئات الناتجة. قد يتم إعادة تسمية الفئة القديمة التي تغيرت مسؤولياتها لمزيد من الوضوح. تحقق مرة أخرى لمعرفة ما إذا كان بإمكانك التخلص من العلاقات ثنائية الاتجاه بين الفئات، إن وجدت.
-
فكر أيضاً في إمكانية الوصول إلى الفئة الجديدة من الخارج. يمكنك إخفاء الفئة تماماً عن العميل بجعلها خاصة (private)، وإدارتها عبر الحقول من الفئة القديمة. بدلاً من ذلك، يمكنك جعلها عامة (public) عن طريق السماح للعميل بتغيير القيم مباشرة. يعتمد قرارك هنا على مدى أمان سلوك الفئة القديمة عندما يتم إجراء تغييرات مباشرة غير متوقعة على القيم في الفئة الجديدة.