Refactoring/replace parameter with method call
تبديل المعاملات باستدعاءات التوابع (Replace Parameter with Method Call)
المشكلة
استدعاء تابع استعلام وتمرير نتائجه كمعاملات لتابع آخر، في حين أنه يمكن لهذا التابع استدعاء الاستعلام مباشرة.
الحل
بدلًا من تمرير القيمة من خلال المعامل، حاول وضع استدعاء الاستعلام داخل متن التابع.
مثال
قبل إعادة التصميم
في لغة Java:
في لغة C#:
في لغة PHP:
في لغة Python:
بعد إعادة التصميم
في لغة Java:
في لغة C#:
في لغة PHP:
في لغة Python:
لم إعادة التصميم؟
من الصعب فهم قائمة طويلة من المعاملات. إضافة إلى ذلك، غالبًا ما تشبه استدعاءات مثل هذه التوابع سلسلةً من الشلالات، ذات حسابات قيم ملتوية ومتكررة والتي يصعب تتبعها مع وجوب تمريرها إلى التابع. لذا إذا كان يمكن حساب قيمة المعامل بمساعدة تابع ما، فافعل ذلك داخل التابع نفسه وتخلص من المعامل.
فوائد تطبيق الحل
- التخلص من المعاملات غير الضرورية وتبسيط استدعاءات التابع. غالبًا ما لا تُنشأ هذه المعاملات لاستخدام المشروع في وضعه الحالي، ولكن لاحتياجات المستقبل التي قد لا تأتي أبدًا.
مساوئ تطبيق الحل
- قد تحتاج إلى المعامل في الغد القريب لتلبية احتياجاتٍ أخرى... الأمر الذي يجعلك تعيد كتابة التابع.
آلية الحل
- تأكد من أن شيفرة الحصول على القيمة لا تستخدم معاملات من التابع الحالي، لأنها لن تكون متاحة من داخل التوابع أخرى. إذا كان الأمر كذلك، فلن يكون من الممكن نقل الشيفرة البرمجية.
- إذا كانت الشيفرة البرمجية ذات الصلة أكثر تعقيدًا من استدعاء تابع أو دالة منفردَين، استخدم استخراج التوابع لعزل هذه الشيفرة البرمجية في تابع جديد وجعل الاستدعاء بسيطًا.
- استبدل جميع المراجع إلى المعامل المراد استبداله بالاستدعاءات إلى التابع الذي يحصل على القيمة داخل شيفرة التابع الرئيسي.
- استخدم إزالة المعامل لإزالة المعامل غير المستخدم الآن.
مصادر
- صفحة توثيق تبديل المعاملات باستدعاءات التوابع في موقع refactoring.guru.