الفرق بين المراجعتين لصفحة: «Refactoring/pull up field»
Khaled-yassin (نقاش | مساهمات) طلا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق. |
||
سطر 4: | سطر 4: | ||
== الحل == | == الحل == | ||
إزالة الحقل من الأصناف الفرعية ونقله إلى الصنف | إزالة الحقل من الأصناف الفرعية ونقله إلى الصنف الأعلى. | ||
=== مثال === | === مثال === | ||
==== قبل إعادة التصميم ==== | ==== قبل إعادة التصميم ==== | ||
[[ملف:Pull Up Field - Before.png|alt=يحتوي الصنفان Soldier و Tank على نفس الحقل health.|بدون|تصغير|يحتوي الصنفان Soldier و Tank على نفس الحقل health.]] | يحتوي الصنفان <code>Tank</code> و <code>Soldier</code> المتفرعان من الصنف <code>Unit</code> على الحقل المشترك <code>health</code>:[[ملف:Pull Up Field - Before.png|alt=يحتوي الصنفان Soldier و Tank على نفس الحقل health.|بدون|تصغير|يحتوي الصنفان <code>Soldier</code> و <code>Tank</code> على نفس الحقل <code>health</code>.]] | ||
==== بعد إعادة التصميم ==== | ==== بعد إعادة التصميم ==== | ||
[[ملف:Pull Up Field - After.png|بديل=أُزيل الحقل health من الأصناف الفرعية ونُقل إلى الصنف الفائق.|بدون|تصغير| | إزالة الحقل <code>health</code> من الأصناف الفرعية (الصنف <code>Soldier</code> والصنف <code>Tank</code>) ونقله إلى الصنف <code>Unit</code> الأب:[[ملف:Pull Up Field - After.png|بديل=أُزيل الحقل health من الأصناف الفرعية ونُقل إلى الصنف الفائق.|بدون|تصغير|إزالة الحقل <code>health</code> من الأصناف الفرعية ونُقل إلى الصنف الأب.]] | ||
== لم إعادة التصميم؟ == | == لم إعادة التصميم؟ == | ||
سطر 23: | سطر 23: | ||
== آلية الحل == | == آلية الحل == | ||
# تأكد من أن الحقول تُستخدَم لنفس الاحتياجات في الأصناف الفرعية. | # تأكد من أن الحقول تُستخدَم لنفس الاحتياجات في الأصناف الفرعية. | ||
# إذا كان للحقول أسماء مختلفة، | # إذا كان للحقول أسماء مختلفة، أعطها نفس الاسم واستبدل كل المراجع إلى الحقول في الشيفرة الحالية. | ||
# أنشئ | # أنشئ حقلًا من نفس الاسم في الصنف الأعلى. لاحظ أنه إذا كانت الحقول خاصة، فيجب حماية حقل الصنف الأعلى. | ||
# أزل الحقول من الأصناف الفرعية. | # أزل الحقول من الأصناف الفرعية. | ||
# قد ترغب في أخذ [[Refactoring/self encapsulate field|التغليف الداخلي للحقول]] في الاعتبار بالنسبة للحقل الجديد، من أجل إخفائه خلف توابع الوصول. | # قد ترغب في أخذ [[Refactoring/self encapsulate field|التغليف الداخلي للحقول]] في الاعتبار بالنسبة للحقل الجديد، من أجل إخفائه خلف توابع الوصول. | ||
سطر 37: | سطر 37: | ||
[[تصنيف:Refactoring]] | [[تصنيف:Refactoring]] | ||
[[تصنيف:Refactoring Techniques]] | [[تصنيف:Refactoring Techniques]] | ||
[[تصنيف:Dealing with Generalization]] | [[تصنيف:Refactoring Dealing with Generalization]] |
المراجعة الحالية بتاريخ 11:29، 26 فبراير 2019
المشكلة
يحتوي صنفان على نفس الحقل.
الحل
إزالة الحقل من الأصناف الفرعية ونقله إلى الصنف الأعلى.
مثال
قبل إعادة التصميم
يحتوي الصنفان Tank
و Soldier
المتفرعان من الصنف Unit
على الحقل المشترك health
:
بعد إعادة التصميم
إزالة الحقل health
من الأصناف الفرعية (الصنف Soldier
والصنف Tank
) ونقله إلى الصنف Unit
الأب:
لم إعادة التصميم؟
تنمو الأصناف الفرعية وتتطور بشكل منفصل، مما يتسبب في ظهور حقول وتوابع متطابقة (أو شبه متطابقة).
فوائد تطبيق الحل
- إزالة تكرار الحقول في الأصناف الفرعية.
- تسهيل النقل المتتابع للتوابع المتكررة إذا كانت موجودة في الأصناف الفرعية إلى الصنف الفائق.
آلية الحل
- تأكد من أن الحقول تُستخدَم لنفس الاحتياجات في الأصناف الفرعية.
- إذا كان للحقول أسماء مختلفة، أعطها نفس الاسم واستبدل كل المراجع إلى الحقول في الشيفرة الحالية.
- أنشئ حقلًا من نفس الاسم في الصنف الأعلى. لاحظ أنه إذا كانت الحقول خاصة، فيجب حماية حقل الصنف الأعلى.
- أزل الحقول من الأصناف الفرعية.
- قد ترغب في أخذ التغليف الداخلي للحقول في الاعتبار بالنسبة للحقل الجديد، من أجل إخفائه خلف توابع الوصول.
انظر أيضًا
- دفع الحقل لأسفل (Push Down Field).
- سحب التابع لأعلى (Pull Up Method).
- الشيفرة المكررة (Duplicate Code).