الفرق بين المراجعتين ل"Refactoring/form template method"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: تكوين قالب تابع (Form Template Method)}}</noinclude> == المشكلة == تُنفِّذ الأصناف الفرعية خوار...')
 
ط (مراجعة وتدقيق.)
 
سطر 4: سطر 4:
  
 
== الحل ==
 
== الحل ==
نقل بنية الخوارزمية والخطوات المتطابقة إلى الصنف الفائق، وترك تنفيذ الخطوات المختلفة في الأصناف الفرعية.
+
نقل بنية الخوارزمية والخطوات المتطابقة إلى الصنف الأب، وترك تنفيذ الخطوات المختلفة في الأصناف الفرعية.
  
 
=== مثال ===
 
=== مثال ===
  
 
==== قبل إعادة التصميم ====
 
==== قبل إعادة التصميم ====
[[ملف:Form Template Method - Before.png|بديل=تُنفِّذ الأصناف الفرعية خوارزميات تحتوي على خطوات مماثلة في نفس الترتيب.|بدون|تصغير|تُنفِّذ الأصناف الفرعية خوارزميات تحتوي على خطوات مماثلة في نفس الترتيب.]]
+
احتواء الصنفين الفرعيين <code>ResidentialSite</code> و <code>LifelineSite</code> على نفس الخوارزمية:[[ملف:Form Template Method - Before.png|بديل=تُنفِّذ الأصناف الفرعية خوارزميات تحتوي على خطوات مماثلة في نفس الترتيب.|بدون|تصغير|تُنفِّذ الأصناف الفرعية خوارزميات تحتوي على خطوات مماثلة في نفس الترتيب.]]
  
 
==== بعد إعادة التصميم ====
 
==== بعد إعادة التصميم ====
[[ملف:Form Template Method - After.png|بديل=تُنقل بنية الخوارزمية والخطوات المتطابقة إلى الصنف الفائق، ويُترك تنفيذ الخطوات المختلفة في الأصناف الفرعية.|بدون|تصغير|تُنقل بنية الخوارزمية والخطوات المتطابقة إلى الصنف الفائق، ويُترك تنفيذ الخطوات المختلفة في الأصناف الفرعية.]]
+
نقل الخوارزمية إلى الصنف <code>Site</code> الأب للصنفين الفرعيين:[[ملف:Form Template Method - After.png|بديل=تُنقل بنية الخوارزمية والخطوات المتطابقة إلى الصنف الفائق، ويُترك تنفيذ الخطوات المختلفة في الأصناف الفرعية.|بدون|تصغير|تُنقل بنية الخوارزمية والخطوات المتطابقة إلى الصنف الأب، ويُترك تنفيذ الخطوات المختلفة في الأصناف الفرعية.]]
  
 
== لم إعادة التصميم؟ ==
 
== لم إعادة التصميم؟ ==
تتطور الأصناف الفرعية بالتوازي، وأحيانا من قبل أشخاص مختلفين، مما يؤدي إلى تكرار الشيفرة والأخطاء، وصعوبات في صيانة الشيفرة، لأن كل تغيير يجب أن يحدث في جميع الأصناف الفرعية.
+
تتطور الأصناف الفرعية بالتوازي، وأحيانًا من قبل أشخاص مختلفين، مما يؤدي إلى تكرار الشيفرة والأخطاء، وصعوبات في صيانة الشيفرة، لأنَّ كل تغيير يجب أن يحدث في جميع الأصناف الفرعية.
  
 
== فوائد تطبيق الحل ==
 
== فوائد تطبيق الحل ==
* تكرار الشيفرة لا يشير دائما إلى حالات بسيطة من النسخ واللصق. غالبًا ما يحدث التكرار في مستوى أعلى، مثل عندما يكون لديك تابع لترتيب الأرقام وتابع لترتيب مجموعات الكائنات التي تُميَّزها فقط عن طريق مقارنة العناصر. يلغي إنشاء قالب تابع هذا التكرار من خلال دمج خطوات الخوارزمية المشتركة في صنف فائق وترك الاختلافات فقط في الأصناف الفرعية.
+
* تكرار الشيفرة لا يشير دائمًا إلى حالات بسيطة من النسخ واللصق. غالبًا ما يحدث التكرار في مستوى أعلى، مثل عندما يكون لديك تابع لترتيب الأرقام وتابع لترتيب مجموعات الكائنات التي تُميَّزها فقط عن طريق مقارنة العناصر. يلغي إنشاء قالب تابع هذا التكرار من خلال دمج خطوات الخوارزمية المشتركة في صنف أب وترك الاختلافات فقط في الأصناف الفرعية.
* ويمثل إنشاء قالب تابع مثالا على مبدأ المفتوح/المغلق بشكل فعلي. وعندما تظهر نسخة خوارزمية جديدة، تحتاج فقط لإنشاء صنف فرعي جديد؛ ولا يلزم إجراء أي تغييرات على الشيفرة الموجودة.
+
* ويمثل إنشاء قالب تابع مثالًا على مبدأ المفتوح/المغلق بشكل فعلي. وعندما تظهر نسخة خوارزمية جديدة، تحتاج فقط لإنشاء صنف فرعي جديد؛ ولا يلزم إجراء أي تغييرات على الشيفرة الموجودة.
  
 
== آلية الحل ==
 
== آلية الحل ==
 
# قسِّم الخوارزميات في الأصناف الفرعية إلى الأجزاء المكونة لها موصوفةً في توابع منفصلة. يمكن أن يساعد [[Refactoring/extract method|استخراج التوابع]] في هذا.
 
# قسِّم الخوارزميات في الأصناف الفرعية إلى الأجزاء المكونة لها موصوفةً في توابع منفصلة. يمكن أن يساعد [[Refactoring/extract method|استخراج التوابع]] في هذا.
# يمكن نقل التوابع الناتجة المتطابقة في جميع الأصناف الفرعية إلى صنفٍ فائق باستخدام [[Refactoring/pull up method|سحب التابع لأعلى]].
+
# يمكن نقل التوابع الناتجة المتطابقة في جميع الأصناف الفرعية إلى صنفٍ أبٍ باستخدام [[Refactoring/pull up method|سحب التابع لأعلى]].
 
# يمكن إعطاء التوابع غير المتشابهة أسماء متسقة باستخدام إعادة [[Refactoring/rename method|تسمية التوابع]].
 
# يمكن إعطاء التوابع غير المتشابهة أسماء متسقة باستخدام إعادة [[Refactoring/rename method|تسمية التوابع]].
# انقل توقيعات التوابع غير المتشابهة إلى صنف فائق كأصناف مجردة باستخدام [[Refactoring/pull up method|سحب التابع لأعلى]]. اترك تطبيقاتهم في الأصناف الفرعية.
+
# انقل توقيعات التوابع غير المتشابهة إلى صنف أب كأصناف مجردة باستخدام [[Refactoring/pull up method|سحب التابع لأعلى]]. اترك تطبيقاتهم في الأصناف الفرعية.
# وأخيرًا، اسحب التابع الرئيسي للخوارزمية لأعلى إلى الصنف الفائق. الآن يجب أن تعمل مع خطوات التابع الموصوف في الصنف الفائق، سواء حقيقي أو مجرد.
+
# وأخيرًا، اسحب التابع الرئيسي للخوارزمية لأعلى إلى الصنف الأب. الآن يجب أن تعمل مع خطوات التابع الموصوف في الصنف الفائق، سواء حقيقي أو مجرد.
  
 
== انظر أيضًا ==
 
== انظر أيضًا ==
* [[Refactoring/template-method|قالب تابع (Template Method)]].
+
* [[Design Patterns/template method|قالب تابع (Template Method)]].
 
* [[Refactoring/duplicate code|الشيفرة المكررة (Duplicate Code)]].
 
* [[Refactoring/duplicate code|الشيفرة المكررة (Duplicate Code)]].
  
سطر 36: سطر 36:
 
[[تصنيف:Refactoring]]
 
[[تصنيف:Refactoring]]
 
[[تصنيف:Refactoring Techniques]]
 
[[تصنيف:Refactoring Techniques]]
[[تصنيف:Dealing with Generalization]]
+
[[تصنيف:Refactoring Dealing with Generalization]]

المراجعة الحالية بتاريخ 11:28، 26 فبراير 2019

المشكلة

تُنفِّذ الأصناف الفرعية خوارزميات تحتوي على خطوات مماثلة في نفس الترتيب.

الحل

نقل بنية الخوارزمية والخطوات المتطابقة إلى الصنف الأب، وترك تنفيذ الخطوات المختلفة في الأصناف الفرعية.

مثال

قبل إعادة التصميم

احتواء الصنفين الفرعيين ResidentialSite و LifelineSite على نفس الخوارزمية:

تُنفِّذ الأصناف الفرعية خوارزميات تحتوي على خطوات مماثلة في نفس الترتيب.
تُنفِّذ الأصناف الفرعية خوارزميات تحتوي على خطوات مماثلة في نفس الترتيب.

بعد إعادة التصميم

نقل الخوارزمية إلى الصنف Site الأب للصنفين الفرعيين:

تُنقل بنية الخوارزمية والخطوات المتطابقة إلى الصنف الفائق، ويُترك تنفيذ الخطوات المختلفة في الأصناف الفرعية.
تُنقل بنية الخوارزمية والخطوات المتطابقة إلى الصنف الأب، ويُترك تنفيذ الخطوات المختلفة في الأصناف الفرعية.

لم إعادة التصميم؟

تتطور الأصناف الفرعية بالتوازي، وأحيانًا من قبل أشخاص مختلفين، مما يؤدي إلى تكرار الشيفرة والأخطاء، وصعوبات في صيانة الشيفرة، لأنَّ كل تغيير يجب أن يحدث في جميع الأصناف الفرعية.

فوائد تطبيق الحل

  • تكرار الشيفرة لا يشير دائمًا إلى حالات بسيطة من النسخ واللصق. غالبًا ما يحدث التكرار في مستوى أعلى، مثل عندما يكون لديك تابع لترتيب الأرقام وتابع لترتيب مجموعات الكائنات التي تُميَّزها فقط عن طريق مقارنة العناصر. يلغي إنشاء قالب تابع هذا التكرار من خلال دمج خطوات الخوارزمية المشتركة في صنف أب وترك الاختلافات فقط في الأصناف الفرعية.
  • ويمثل إنشاء قالب تابع مثالًا على مبدأ المفتوح/المغلق بشكل فعلي. وعندما تظهر نسخة خوارزمية جديدة، تحتاج فقط لإنشاء صنف فرعي جديد؛ ولا يلزم إجراء أي تغييرات على الشيفرة الموجودة.

آلية الحل

  1. قسِّم الخوارزميات في الأصناف الفرعية إلى الأجزاء المكونة لها موصوفةً في توابع منفصلة. يمكن أن يساعد استخراج التوابع في هذا.
  2. يمكن نقل التوابع الناتجة المتطابقة في جميع الأصناف الفرعية إلى صنفٍ أبٍ باستخدام سحب التابع لأعلى.
  3. يمكن إعطاء التوابع غير المتشابهة أسماء متسقة باستخدام إعادة تسمية التوابع.
  4. انقل توقيعات التوابع غير المتشابهة إلى صنف أب كأصناف مجردة باستخدام سحب التابع لأعلى. اترك تطبيقاتهم في الأصناف الفرعية.
  5. وأخيرًا، اسحب التابع الرئيسي للخوارزمية لأعلى إلى الصنف الأب. الآن يجب أن تعمل مع خطوات التابع الموصوف في الصنف الفائق، سواء حقيقي أو مجرد.

انظر أيضًا

مصادر