Delegation كانت من المفاهيم الفريدة بالنسبة لي عندما بدأت بتعلم Objective-C. و قد أخذني بعض الوقت لاستيعابها. خاصةً انني لم ادرس علوم الحاسوب و معظم ثقافتي البرمجية هي تعلم ذاتي. ما هي أفضل طريقة لتعلم مفهوم Delegation بسرعة؟ كيف يمكن الوصول لمستوى متقدم من الفهم يمكنك من الحكم بسرعة إذا كان Delegation هو النمط التصميمي الأكثر فعالية لمشكلة معينة؟
كيف يمكن احتراف مفهوم Delegation في Objective-C؟
اعتقد ان فكرة الـ Delegation بسيطة، ولكن الـ objective c لديها العديد من المفاهيم الجديدة الغربية "على الاقل كانت غريبة بالنسبة لي"، وعند استخدام الـ objective c في المراحل الاولى يكون راسك ممتلىء باشارات الاستفهام والتعجب :s
delegation : لكي يتكلم كائنين "object" مع بعضهم كائن "أ" وكائن "ب" نقوم بالتالي:
١- يسجل الكائن "ب" نفسه كـ "delegate" للكائن "أ"
٢- لايوجد خطوة اخرى D:
وهكذا يستطيع الكائن "أ" ان يرسل رسائل محددة مسبقا ضمن تعليمة protocol@ هذه الرسائل ستصل لكائن "ب"
هل اضحت الفكرة ابسط؟؟؟
......
كيف يمكنك الحكم بسرعة إذا كان Delegation هو النمط التصميمي الأكثر فعالية لمشكلة معينة؟
ليس لدي جواب شامل كامل صحيح لهذا السؤال :( ويختلف الموضوع من حالة لحالة اخرى.
ولكن قبل ان اشاركك اسلوبي في تصميم الشفرة البرمجية ارغب ان استعرض الطرق التي اعرفها التي تتيح تواصل الكائنات بين بعضها:
1- delegation
2- blocks
3- kvo
4- notification center
بالنسبة لي:
استخدم delegation عندما: يكون هناك "كائنين فقط" يريدان ان يتواصلا مع بعض ويوجد علاقة (اب \ ابن ) بينهما
استخدم ال blocks: فقط عندما ارغب ان يخبرني method ما بانه انتها من تنفيذ مهمة معينة تعمل على thread اخر
بالمناسبة هنا مقالة جميلة يقترح فيها الكاتب متى نستخدم الـ blocks ومتى نستخدم الـ delegation :
KVO: فقط عندما ارغب مراقبة قيمة peoperty ما
notification center: استخدمه عندما ارغب بارسال رسالة لاكثر من كائنين على مستوى التطبيق وتلك الـ الكائنات لايوجد علاقة بينها.
هناك اسلوب خامس اعتبره غبي makeObjectsPerformSelector:@selector(methodSupportedByEveryListener)
لا احبه ولا استخدمه
التعليقات