استبدال الدالة بكائن دالة.
لديك دالة طويلة تتشابك فيها المتغيرات المحلية لدرجة أنه لا يمكنك تطبيق تقنية استخلاص الدالة (Extract Method).
قم بتحويل الدالة إلى فئة منفصلة بحيث تصبح المتغيرات المحلية حقولاً في هذه الفئة. بعد ذلك، يمكنك تقسيم الدالة إلى عدة دوال فرعية داخل نفس الفئة.
##Example
class Order {
// ...
public double price() {
double primaryBasePrice;
double secondaryBasePrice;
double tertiaryBasePrice;
// إجراء عملية حسابية طويلة.
}
}class Order {
// ...
public double price() {
return new PriceCalculator(this).compute();
}
}
class PriceCalculator {
private double primaryBasePrice;
private double secondaryBasePrice;
private double tertiaryBasePrice;
public PriceCalculator(Order order) {
// نسخ المعلومات ذات الصلة من كائن الطلب (order).
}
public double compute() {
// إجراء عملية حسابية طويلة.
}
}##Why Refactor
تكون الدالة طويلة جدًا ولا يمكنك فصلها بسبب التشابك المعقد للمتغيرات المحلية التي يصعب عزلها عن بعضها البعض.
الخطوة الأولى هي عزل الدالة بأكملها في فئة منفصلة وتحويل متغيراتها المحلية إلى حقول في الفئة.
أولاً، يسمح هذا بعزل المشكلة على مستوى الفئة. ثانيًا، يمهد الطريق لتقسيم دالة كبيرة وغير عملية إلى دوال أصغر حجمًا لا تتناسب مع غرض الفئة الأصلية على أي حال.
##Benefits
- عزل دالة طويلة في فئة خاصة بها يسمح بمنع تضخم حجم الدالة. كما يسمح بتقسيمها إلى دوال فرعية داخل هذه الفئة، دون تلويث الفئة الأصلية بالعديد من الدوال المساعدة.
##How to Refactor
-
أنشئ فئة جديدة. وقم بتسميتها بناءً على الغرض من الدالة التي تعيد هيكلتها.
-
في الفئة الجديدة، قم بإنشاء حقل خاص (private field) لتخزين مرجع إلى مثيل من الفئة التي كانت الدالة تقع فيها سابقًا. يمكن استخدامه للحصول على بعض البيانات المطلوبة من الفئة الأصلية إذا لزم الأمر.
-
قم بإنشاء حقل خاص منفصل لكل متغير محلي في الدالة.
-
أنشئ بانيًا (constructor) يقبل معلمات تمثل قيم جميع المتغيرات المحلية للدالة ويقوم أيضًا بتهيئة الحقول الخاصة المقابلة.
-
أعلن عن الدالة الرئيسية وانسخ كود الدالة الأصلية إليها، مع استبدال المتغيرات المحلية بالحقول الخاصة.
-
استبدل جسم الدالة الأصلية في الفئة الأصلية عن طريق إنشاء كائن دالة واستدعاء دالته الرئيسية.