الفرق بين المراجعتين ل"Refactoring/parameterize method"
اذهب إلى التنقل
اذهب إلى البحث
جميل-بيلوني (نقاش | مساهمات) ط (مراجعة وتدقيق.) |
جميل-بيلوني (نقاش | مساهمات) ط (تصحيح التصنيفات) |
||
سطر 5: | سطر 5: | ||
== الحل == | == الحل == | ||
تجميع هذه التوابع باستخدام معامل يُمرر القيمة الخاصة الضرورية. | تجميع هذه التوابع باستخدام معامل يُمرر القيمة الخاصة الضرورية. | ||
− | + | ||
− | |||
− | |||
=== مثال === | === مثال === | ||
المراجعة الحالية بتاريخ 08:39، 26 فبراير 2019
المشكلة
تؤدي توابع متعددة أعمالًا مماثلة تختلف فقط من حيث قيمها الداخلية أو أرقامها أو عملياتها.
الحل
تجميع هذه التوابع باستخدام معامل يُمرر القيمة الخاصة الضرورية.
مثال
قبل إعادة التصميم
يؤدي التابعان ()fivePercentRaise
و ()tenPercentRaise
الغرض ذاته باختلاف النسبة المئوية المراد زيادتها للموظف Employee
:
بعد إعادة التصميم
تجميع التابعان السابقان في تابع واحد يدعى ()raise
مع تمرير النسبة المئوية المتغيرة إليه:
لم إعادة التصميم؟
إذا وُجِدَت توابع متشابهة، تكون الشيفرة مُكررة في الغالب، ومع كل العواقب التي تترتب على ذلك.
بل أكثر من ذلك، إذا لزِم إضافة نسخة أخرى من هذه الوظيفة، سيتوجب إنشاء تابعٍ أخر. وبدلًا من ذلك، يمكن ببساطة تشغيل التابع القائم مع عامل مختلف.
مساوئ تطبيق الحل
- في بعض الأحيان، قد تذهب تقنية إعادة التصميم هذه لما هو أبعد بكثير، مما يؤدي إلى تابعٍ مشتركٍ طويلٍ ومعقد بدلًا من توابع متعددة أكثر بساطة.
- يجب الحذر أيضًا عند نقل تنشيط/تعطيل وظيفة ما إلى معامل. يمكن أن يؤدي ذلك في نهاية المطاف إلى إنشاء عامل مشروط كبير والذي سيتعين معالجته عن طريق تبديل المعامل بتوابع صريحة.
آلية الحل
- إنشاء تابع جديد مع معامل ونقله إلى الشيفرة البرمجية نفسها لكافة الأصناف عن طريق تطبيق استخراج التابع. لاحظ أنه في الواقع يتشابه جزء معين من التوابع في بعض الأحيان. وفي هذه الحالة، تكون إعادة التصميم عبارة عن استخراج الجزء المتشابه إلى تابعٍ جديد.
- بدِّل القيمة الخاصة/المختلفة بمعامل داخل شيفرة التابع الجديد.
- ابحث عن الأماكن التي يُستدعَى فيها كل تابع قديم، ثم استبدل هذه الاستدعاءات باستدعاءات إلى التابع الجديد الذي يتضمن معاملًا. احذف بعد ذلك التابع القديم.
انظر أيضًا
- استبدال المعامل بتوابع صريحة (Replace Parameter with Explicit Methods).
- استخراج التوابع (Extract Methods).
- تابع قالب النموذج (Form Template Method).
- الشيفرة المكررة (Duplicate Code).