الفرق بين المراجعتين لصفحة: «Refactoring/message chains»
طلا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق. |
||
سطر 8: | سطر 8: | ||
== وما الحل؟ == | == وما الحل؟ == | ||
* [[Refactoring/hide delegate|إخفاء التفويض (hide delegate)]] لحذف الاستدعاءات المُتسلسلة. | * [[Refactoring/hide delegate|إخفاء التفويض (hide delegate)]] لحذف الاستدعاءات المُتسلسلة. | ||
* قد يساعد -ببعض الحالات- التفكيرُ بسبب الوصول إلى آخر كائنٍ (object) مستدعى، وعندها يمكن اللجوء إلى [[Refactoring/extract method|استخراج تابعٍ (extract method)]] يقوم بالمهمة ذاتها، أو الاعتماد على [[ | * قد يساعد -ببعض الحالات- التفكيرُ بسبب الوصول إلى آخر كائنٍ (object) مستدعى، وعندها يمكن اللجوء إلى [[Refactoring/extract method|استخراج تابعٍ (extract method)]] يقوم بالمهمة ذاتها، أو الاعتماد على [[Refactoring/move method|نقل التابع (move method)]] لجعل المهمّة في بداية سلسلة الاستدعاءات بدلًا من نهايتها. | ||
== إليك المزيد == | == إليك المزيد == | ||
سطر 19: | سطر 19: | ||
* [[Refactoring/hide delegate|إخفاء التفويض (hide delegate)]] | * [[Refactoring/hide delegate|إخفاء التفويض (hide delegate)]] | ||
* [[Refactoring/extract method|استخراج التابع (extract method)]] | * [[Refactoring/extract method|استخراج التابع (extract method)]] | ||
* [[ | * [[Refactoring/move method|نقل التابع (move method)]] | ||
* [[Refactoring/middle man|مشكلة الوسيط (middle man)]] | * [[Refactoring/middle man|مشكلة الوسيط (middle man)]] | ||
== مصادر == | == مصادر == | ||
* [https://refactoring.guru/smells/message-chains صفحة توثيق سلاسل الرسائل في موقع refactoring.guru.] | * [https://refactoring.guru/smells/message-chains صفحة توثيق سلاسل الرسائل في موقع refactoring.guru.] | ||
[[تصنيف:Refactoring]] | |||
[[تصنيف:Refactoring Smells]] | |||
[[تصنيف:Refactoring Couplers]] |
المراجعة الحالية بتاريخ 15:13، 27 فبراير 2019
توصيف المشكلة
وجود العديد من الاستدعاءات المتسلسلة في الشيفرة، مثل: $a->b()->c()->d()
.
أسبابها
تحدث المشكلة عند طلب العميل (client request) كائنًا (object) آخر والذي بدوره يطلب كائنًا آخر ثالثًا وهكذا، مما يعني اعتماد العميل على التنقّل (navigation) في بنية الأصناف (class structure)، وبالتالي فإنّ أيّ تعديلٍ في تلك العلاقات سيتطلَّبُ إجراء التعديلات أيضًا على العميل بحدِّ ذاته.
وما الحل؟
- إخفاء التفويض (hide delegate) لحذف الاستدعاءات المُتسلسلة.
- قد يساعد -ببعض الحالات- التفكيرُ بسبب الوصول إلى آخر كائنٍ (object) مستدعى، وعندها يمكن اللجوء إلى استخراج تابعٍ (extract method) يقوم بالمهمة ذاتها، أو الاعتماد على نقل التابع (move method) لجعل المهمّة في بداية سلسلة الاستدعاءات بدلًا من نهايتها.
إليك المزيد
سيخفِّف حلُّ المشكلة من الاعتمادية (dependency) ما بين أصناف (classes) السلسلة الواحدة، كما وسيقلِّلُ أيضًا من حجم الشيفرة المُستخدَمة.
تجاهل المشكلة
قد يُسبِّبُ الإخفاء المفرط للتفويض (aggressive delegate hiding) الحصولَ على شيفرةٍ يصعُب فيها تحديد مكان تنفيذ العمليّات الفعليّة (functionality)، فكن يقظًا لتجنُّب الوقوع بمشكلةٍ أخرى من مشاكل الشيفرات وهي مشكلة الوسيط (middle man).
انظر أيضًا
- إخفاء التفويض (hide delegate)
- استخراج التابع (extract method)
- نقل التابع (move method)
- مشكلة الوسيط (middle man)