الفرق بين المراجعتين لصفحة: «Refactoring/parameterize method»
Khaled-yassin (نقاش | مساهمات) أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: تحويل التوابع إلى معاملات (Parameterize Method)}}</noinclude> == المشكلة == تؤدي توابع متعددة أ...' |
جميل-بيلوني (نقاش | مساهمات) ط تصحيح التصنيفات |
||
(مراجعتان متوسطتان بواسطة مستخدمين اثنين آخرين غير معروضتين) | |||
سطر 4: | سطر 4: | ||
== الحل == | == الحل == | ||
تجميع هذه التوابع باستخدام معامل | تجميع هذه التوابع باستخدام معامل يُمرر القيمة الخاصة الضرورية. | ||
=== مثال === | === مثال === | ||
==== قبل إعادة التصميم ==== | ==== قبل إعادة التصميم ==== | ||
[[ملف:Parameterize Method - Before.png|بديل=يؤدي التابعان أعمالًا مماثلة تختلف فقط من حيث قيمها الداخلية أو أرقامها أو عملياتها.|بدون|تصغير|يؤدي التابعان أعمالًا مماثلة تختلف فقط من حيث قيمها الداخلية أو أرقامها أو عملياتها.]] | يؤدي التابعان <code>()fivePercentRaise</code> و <code>()tenPercentRaise</code> الغرض ذاته باختلاف النسبة المئوية المراد زيادتها للموظف <code>Employee</code>:[[ملف:Parameterize Method - Before.png|بديل=يؤدي التابعان أعمالًا مماثلة تختلف فقط من حيث قيمها الداخلية أو أرقامها أو عملياتها.|بدون|تصغير|يؤدي التابعان أعمالًا مماثلة تختلف فقط من حيث قيمها الداخلية أو أرقامها أو عملياتها.]] | ||
==== بعد إعادة التصميم ==== | ==== بعد إعادة التصميم ==== | ||
[[ملف:Parameterize Method - After.png|بديل=يجمع التابعين باستخدام معامل يُمرر القيمة الخاصة الضرورية.|بدون|تصغير|يجمع التابعين باستخدام معامل يُمرر القيمة الخاصة الضرورية.]] | تجميع التابعان السابقان في تابع واحد يدعى <code>()raise</code> مع تمرير النسبة المئوية المتغيرة إليه:[[ملف:Parameterize Method - After.png|بديل=يجمع التابعين باستخدام معامل يُمرر القيمة الخاصة الضرورية.|بدون|تصغير|يجمع التابعين باستخدام معامل يُمرر القيمة الخاصة الضرورية.]] | ||
== لم إعادة التصميم؟ == | == لم إعادة التصميم؟ == | ||
سطر 23: | سطر 20: | ||
== مساوئ تطبيق الحل == | == مساوئ تطبيق الحل == | ||
* في بعض | * في بعض الأحيان، قد تذهب تقنية إعادة التصميم هذه لما هو أبعد بكثير، مما يؤدي إلى تابعٍ مشتركٍ طويلٍ ومعقد بدلًا من توابع متعددة أكثر بساطة. | ||
* يجب الحذر أيضًا عند نقل تنشيط/تعطيل وظيفة ما إلى معامل.يمكن أن يؤدي ذلك في نهاية المطاف إلى إنشاء عامل مشروط كبير والذي سيتعين معالجته عن طريق [[Refactoring/replace parameter with explicit methods|تبديل المعامل بتوابع صريحة]]. | * يجب الحذر أيضًا عند نقل تنشيط/تعطيل وظيفة ما إلى معامل. يمكن أن يؤدي ذلك في نهاية المطاف إلى إنشاء عامل مشروط كبير والذي سيتعين معالجته عن طريق [[Refactoring/replace parameter with explicit methods|تبديل المعامل بتوابع صريحة]]. | ||
== آلية الحل == | == آلية الحل == | ||
# إنشاء تابع جديد مع معامل ونقله إلى الشيفرة البرمجية نفسها لكافة الأصناف عن طريق تطبيق [[Refactoring/extract method|استخراج التابع]]. لاحظ أنه في الواقع يتشابه جزء معين من التوابع في بعض الأحيان. وفي هذه الحالة، تكون إعادة التصميم عبارة عن استخراج الجزء المتشابه إلى تابعٍ جديد. | # إنشاء تابع جديد مع معامل ونقله إلى الشيفرة البرمجية نفسها لكافة الأصناف عن طريق تطبيق [[Refactoring/extract method|استخراج التابع]]. لاحظ أنه في الواقع يتشابه جزء معين من التوابع في بعض الأحيان. وفي هذه الحالة، تكون إعادة التصميم عبارة عن استخراج الجزء المتشابه إلى تابعٍ جديد. | ||
# بدِّل القيمة الخاصة/المختلفة بمعامل داخل شيفرة التابع الجديد. | # بدِّل القيمة الخاصة/المختلفة بمعامل داخل شيفرة التابع الجديد. | ||
# ابحث عن الأماكن التي يُستدعَى فيها كل تابع قديم، ثم استبدل هذه الاستدعاءات باستدعاءات إلى التابع الجديد الذي يتضمن معاملًا. | # ابحث عن الأماكن التي يُستدعَى فيها كل تابع قديم، ثم استبدل هذه الاستدعاءات باستدعاءات إلى التابع الجديد الذي يتضمن معاملًا. احذف بعد ذلك التابع القديم. | ||
== انظر أيضًا == | == انظر أيضًا == | ||
سطر 41: | سطر 38: | ||
[[تصنيف:Refactoring]] | [[تصنيف:Refactoring]] | ||
[[تصنيف:Refactoring Techniques]] | [[تصنيف:Refactoring Techniques]] | ||
[[تصنيف:Simplifying Method Calls]] | [[تصنيف:Refactoring Simplifying Method Calls]] |
المراجعة الحالية بتاريخ 08:39، 26 فبراير 2019
المشكلة
تؤدي توابع متعددة أعمالًا مماثلة تختلف فقط من حيث قيمها الداخلية أو أرقامها أو عملياتها.
الحل
تجميع هذه التوابع باستخدام معامل يُمرر القيمة الخاصة الضرورية.
مثال
قبل إعادة التصميم
يؤدي التابعان ()fivePercentRaise
و ()tenPercentRaise
الغرض ذاته باختلاف النسبة المئوية المراد زيادتها للموظف Employee
:
بعد إعادة التصميم
تجميع التابعان السابقان في تابع واحد يدعى ()raise
مع تمرير النسبة المئوية المتغيرة إليه:
لم إعادة التصميم؟
إذا وُجِدَت توابع متشابهة، تكون الشيفرة مُكررة في الغالب، ومع كل العواقب التي تترتب على ذلك.
بل أكثر من ذلك، إذا لزِم إضافة نسخة أخرى من هذه الوظيفة، سيتوجب إنشاء تابعٍ أخر. وبدلًا من ذلك، يمكن ببساطة تشغيل التابع القائم مع عامل مختلف.
مساوئ تطبيق الحل
- في بعض الأحيان، قد تذهب تقنية إعادة التصميم هذه لما هو أبعد بكثير، مما يؤدي إلى تابعٍ مشتركٍ طويلٍ ومعقد بدلًا من توابع متعددة أكثر بساطة.
- يجب الحذر أيضًا عند نقل تنشيط/تعطيل وظيفة ما إلى معامل. يمكن أن يؤدي ذلك في نهاية المطاف إلى إنشاء عامل مشروط كبير والذي سيتعين معالجته عن طريق تبديل المعامل بتوابع صريحة.
آلية الحل
- إنشاء تابع جديد مع معامل ونقله إلى الشيفرة البرمجية نفسها لكافة الأصناف عن طريق تطبيق استخراج التابع. لاحظ أنه في الواقع يتشابه جزء معين من التوابع في بعض الأحيان. وفي هذه الحالة، تكون إعادة التصميم عبارة عن استخراج الجزء المتشابه إلى تابعٍ جديد.
- بدِّل القيمة الخاصة/المختلفة بمعامل داخل شيفرة التابع الجديد.
- ابحث عن الأماكن التي يُستدعَى فيها كل تابع قديم، ثم استبدل هذه الاستدعاءات باستدعاءات إلى التابع الجديد الذي يتضمن معاملًا. احذف بعد ذلك التابع القديم.
انظر أيضًا
- استبدال المعامل بتوابع صريحة (Replace Parameter with Explicit Methods).
- استخراج التوابع (Extract Methods).
- تابع قالب النموذج (Form Template Method).
- الشيفرة المكررة (Duplicate Code).