تبسيط استدعاءات التوابع (Simplifying Method Calls)
< Refactoring | techniques
تجعل التقنيات التي سيشار إليها في هذا القسم استدعاءات التوابع أبسط وأسهل للفهم والاستيعاب. سيؤدي ذلك بدوره إلى تبسيط الواجهات للتفاعل بين الأصناف. هذه التقنيات هي:
- إعادة تسمية التوابع (Rename Method)
- المشكلة: لا يعبِّر اسم التابع عن ما يقوم به.
- الحل: إعادة تسمية التابع.
- إضافة المعاملات (Add Parameter)
- المشكلة: لا يملك التابع بيانات كافية لتنفيذ بعض الإجراءات.
- الحل: إنشاء معامل جديد لتمرير البيانات الضرورية.
- حذف المعاملات (Remove Parameter)
- المشكلة: لا يُستخدم معاملٌ ما في متن التابع.
- الحل: إزالة المعامل غير المستخدم.
- فصل الاستعلامات عن المُعدِّلات (Separate Query from Modifier)
- المشكلة: هل لديك تابعٌ يُعيد قيمةً ما ولكن يغيِّر أيضا شيئًا ما داخل الكائن؟
- الحل: تقسيم التابع إلى تابعَين منفصلَين. كما يمكن أن نتوقع، يجب على أحدهما أن يعيد القيمة ويُغيِّر الآخر الكائن.
- تحويل التوابع إلى معاملات (Parameterize Method)
- المشكلة: تؤدي توابع متعددة أعمالًا مماثلة تختلف فقط من حيث قيمها الداخلية أو أرقامها أو عملياتها.
- الحل: تجميع هذه التوابع باستخدام معامل يُمرر القيمة الخاصة الضرورية.
- استبدال المعامل بتوابع صريحة (Replace Parameter with Explicit Methods)
- المشكلة: ينقسم التابع إلى أجزاء، كل منها يتم تشغيله اعتمادًا على قيمة المعامل.
- الحل: استخراج الأجزاء الفردية من التابع إلى توابعها الخاصة واستدعائها بدلًا من استدعاء التابع الأصلي.
- الحفاظ على الكائن كاملًا (Preserve Whole Object)
- المشكلة: جلب عدة قيم من أحد الكائنات، ثم تمريرها كمعاملات إلى أحد التوابع.
- الحل: حاول تمرير الكائن بالكامل بدلًا من ذلك.
- تبديل المعاملات باستدعاءات التوابع (Replace Parameter with Method Call)
- المشكلة: استدعاء تابع استعلام (query method) وتمرير نتائجه كمعاملات لتابع آخر، في حين أنه يمكن لهذا التابع استدعاء الاستعلام مباشرة.
- الحل: بدلًا من تمرير القيمة من خلال المعامل، حاول وضع استدعاء الاستعلام داخل متن التابع.
- تعريف كائن المُعامل (Introduce Parameter Object)
- المشكلة: تحتوي التوابع على نفس المجموعة المتكررة من المعاملات.
- الحل: استبدال هذه المعاملات بكائنٍ واحد.
- ازالة توابع الإعدادات (Remove Setting Method)
- المشكلة: يكون تعيين قيمة الحقل فقط عند إنشائه، ولا تتغير في أي وقت لاحق.
- الحل: إزالة التوابع التي تضبط قيمة الحقل.
- إخفاء التابع (Hide Method)
- المشكلة: لا يُستخدم التابع من قِبل الأصناف الأخرى أو يستخدم فقط داخل التسلسل الهرمي للصنف الخاص به.
- الحل: جعل التابع خاصًا أو محميًا.
- استبدال المُنشئ بتابع التصميم (Replace Constructor with Factory Method)
- المشكلة: لديك مُنشئ (constructor) معقد يقوم بما هو أكثر من مجرد وضع قيم المعامل في حقول الكائن.
- الحل: إنشاء تابع تصميم واستخدامه لاستبدال استدعاءات المُنشئ.
- استبدال شيفرات الأخطاء باستثناءات (Replace Error Code with Exception)
- المشكلة: يعيد التابع قيمة خاصة تشير إلى خطأ.
- الحل: إطلاق استثناء بدلًا من ذلك.
- استبدال الاستثناءات بالاختبارات (Replace Exception with Test)
- المشكلة: إطلاق استثناء يمكن لاختبار بسيط أن يحل محله.
- الحل: يستعاض عن الاستثناء باختبار الحالة.