الفرق بين المراجعتين لصفحة: «Refactoring/alternative classes with different interfaces»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الأصناف البديلة (alternative) ذات الواجهات (interfaces) المختلفة}}</noinclude> == توصيف المشكلة ==...' |
ط إضافة رابط المصدر |
||
سطر 26: | سطر 26: | ||
== مصادر == | == مصادر == | ||
* صفحة الأصناف البديلة في | * [https://refactoring.guru/smells/alternative-classes-with-different-interfaces صفحة توثيق الأصناف البديلة في موقع refactoring.guru.] | ||
[[تصنيف:Refactoring]] | [[تصنيف:Refactoring]] | ||
[[تصنيف:Refactoring Smells]] | [[تصنيف:Refactoring Smells]] | ||
[[تصنيف:Refactoring Classes]] | [[تصنيف:Refactoring Classes]] | ||
[[تصنيف:Refactoring Methods]] | [[تصنيف:Refactoring Methods]] |
مراجعة 17:09، 18 يوليو 2018
توصيف المشكلة
التطابق بالمهام (function) ما بين صنفين (classes) ولكن بأسماءٍ مختلفةٍ لتوابعهما (methods).
أسبابها
عدم دراية المبرمج بوجود صنفٍ آخر يكافِئ بمهامّه مهامّ الصنف الحالي الذي ينشِئه.
وما الحل؟
حذف أحد الصنفين بعد تنفيذ إحدى الحلول الآتية:
- إعادة تسمية التوابع (methods) لتصبح متطابقةً بكافّة الأصناف البديلة (alternative) (أي الأصناف المتكافئة بالمهام).
- توحيد التوقيع (signature) وتعريف الاستخدام ما بين التوابع، وذلك إمّا بنقل التابع (move method) أو إضافة المعاملات (add parameters) أو دمج التوابع عبر المعاملات (parameterize method).
- إن كان التطابق جزئيًا لا يشمل كافّة المهام في الصنفين فمن الممكن استخراج صنفٍ أعلى (superclass) وجعلهما صنفين فرعيين (subclasses) له.
إليك المزيد
ستتخلَّص -بعلاجك المشكلةَ- من الشيفرات المُتكرِّرة (duplicates) في البرنامج مما سيقلِّصُ من حجمه، وستصبح الشيفرة مقروءةً ومفهومةً أكثر، ولم يعد هناك داعٍ للتساؤل عن سبب وجود صنفين مختلفين لأداء مهمةٍ واحدة!
تجاهل المشكلة
ليس من السهل دائمًا دمج الصنفين وقد يصبح مستحيلًا ببعض الحالات؛ كأن يقع الصنفان في مكتبتين مختلفتين لكلٍّ منهما صنفها الخاصّ بها.
انظر أيضًا
- إعادة تسمية التوابع (methods)
- نقل التابع (move method)
- إضافة المعاملات (add parameters)
- دمج التوابع عبر المعاملات (parameterize method)
- استخراج صنفٍ أعلى (superclass)