ios_7_home_screen_hero_v2

أنماط تتعدّد،

نتحدّث اليوم عن أبرز أنماط التصميم الخاصة بمنصّات التشغيل الهواتف الذكية،
نمط التصميم (design pattern) يقدّم حلّا  لمشكلة شائعة في حقل هندسة البرمجيات (software engineering)، الأنماط في تعريفها تصاميم مجرّدة وليست قطع أكواد برمجية، فعندما تختار تصميما ما فأنت تتبنّى مجموعة من القيم لحل مشكلة ما بغرض الوصول لهدف محدّد مسبقا، وهذا بغض النظر عن نوع التطبيق الذي أنت بصدد تطويره، فهم أنماط التصميم يسمح لك باستخدام أطر العمل (frameworks) بشكل أفضل، ويسمح بالتبع ببناء تطبيقات سهلة الإستخدام وإعادة الاستخدام، سهلة الإنماء (scalable)، وسهلة التعديل.

iOS7IconRadius

أبرزأنماط التصميم الشائعة الاستخدام هي كالتالي:

  •  نمط-عرض-متحكم MVC (Model View Controller).
  • Delegation.
  • Blocks.

سيضم هذا المقال مصطلحات غير معرّبة كما يقدّم مفاهيم عامة تعريفية، التوثيق الرسمي لا غنى عنه لفهم التفاصيل،

  1. MVC (Model View Controller).

لعلّ هذا النمط هو الأكثر شيوعا، إذ يستخدم على نطاق واسع في عالم الويب وعالم تطبيقات الهواتف الذكية وحتى التطبيقات المكتبية بمسميات تختلف، يقوم النمط Model بالحفاظ على بياناتك والإبقاء على الروابط اللازمة تجاهها، نتحدّث غالبا عن أدوات التخزين التالية: CoreData، PLists، Sqlite وغيرها، بينمها يقوم العرض بالاهتمام بتفاصيل عرض البيانات ويضم مجمل الفئات (Classes) الخاصة بإطار العمل UIkit وبقية أطر العرض الإضافية، بينما يلعب المتحكّم Controller دور الوسيط بين الاثنين كما يوضّح الرسم التالي:

model_view_controller

الفائدة من مثلا هكذا نمط هو الفصل بين البيانات و عملية عرضها، هذا يجنّب إعادة توليد الكود البرمجي عند برمجة تطبيق للأيفون مع نسخة أخرى للأيباد مثلا، الفائدة تبرز كذلك مثلا عند تغيير نظام تخزين البيانات من نظام ملفات الـPLists نحول العملاق CoreData اذ لا حاجة سوى لتغيير شكل البيانات مع الحفاظ على طريقة العرض نفسها.
design_patterns_2x

  1. Delegation.

Delegation أو التفويض هو نمط تصميم بسيط ومتقدّم يسمح لكائن Object ما بإجراء العمليات وتنفيد الأوامر نيابة عن كائن آخر، أو بالتعاون معه، يتمّ تسجيل المندوب Delegate تلقائيا كمراقب Observer للتنبيهات Notifications القادمة من بقية الكائنات التي أخدت هذا التفويض باسم الكائن، كل ما يجب على المندوب Delegate القيام به هو تعريف كل الدوال والطرق Methods التي قام إطار العمل الأصلي بتعريفها كبروتوكول Protocol للكائنات الراغبة في أخد التفويض.

مثال: لنعتبر الكلاس الرئيسي UITableView الخاص بإظهار جداول البيانات، الدالة didSelectRowAtIndexPath: في واقع الأمر مندوب Delegate عن جدول البيانات

هذه الدالة تخبر المندوب أنّ السّطر  indexPath تم تحديده ومن خلال الدالة يمكن اقتراح السلوك المطلوب للتعامل مع هذا التحديد.

بمساعدة دالة الإنتداب هاته يمكن معرفة السطر من جدول البيانات UITableView الذي تمّ تحديده وهذا في حالة أن جدول البيانات هذا يقوم بالتصريح المناسب بمندوبه من خلال اضافة التصريح في ملف الترويسة Header (.h) بمعنى:

وكذا في ملف التعريفات (.m) من خلال الأمر

Untitled-1

من خلال هذا المثال البسيط يستطيع المطور معرفة السطر الذي تم تحديده وتبنّي السلوك المناسب تجاهه، يفيد هذا النمط كذلك في اجتناب عملية الوراثة المتعدّدة  Multiple inheretance وكذا تجنب وراثة الكلاسات Classes المستخدمة بكثرة وتبني معالجة مخصّصة من خلال المندوب بدلا من اعادة تعريف طرائق الكلاسات الأصلية.

  1. Blocks.

البلوكات أو Blocks هو نمط تصميم يمّس مستوى لغة البرمجة نفسها، إذ يسمح بكتابة قطع من الكود البرمجي وتمريرها للدوال على شكل بيانات، البلوكات تمثل كائنات في لغة الـObjective-c وبالتالي يمكن إضافتها والتعامل معها ضمن الكلاسات الأصلية مثل NSArray أو NSDictionary.

مثال على البلوك في الكود التالي:

في المثال أعلاه، البلوك لا يأخد أي مدخلات ولا يرجع أي مخرجات، ولتعريف بلوك يكفي استخدام العلامة ^ كبادئة واحتضان المحتوى ضمن {}،

في المثال أعلاه يأخد البلوك رقم Integer كمدخل وجداء المدخل بالعدد 7 كمخرج يتم تخزينه في البلوك نفسه،

blocks-480x196 (1)

استخدامات البلوك الشائعة:

  • يستخدم بكثرة بدلا عن الـCallBacks للدوال.
  • يمكن تشارك الكود بين أكثر من Threads بسهولة أكبر.

بالإضافة لما سبق من أنماط التصميم توفّر أبل أنماط أخرى مثل: Target-Action, Abstract Factory,Adapter,Chain of Responsibility,Command,Composite,Decorator,Facade,Iterator,Mediator,Memento,Observer,Proxy,Receptionist,Singleton.

يمكن القراءة أكثر عن كل ما سبق من خلال التوثيق الرسمي على الرابط:

https://developer.apple.com/legacy/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html

جدير بالذكر أن هذه الأنماط يمكن استخدامها بشكل متعدّد بما متوافق فيما بينها حيث الغرض هو تسهيل تتبع الكود ومعالجة الحالات الشائعة بسلاسة أكبر.

ios7macup

 

أهم أنماط التصميم (Design patterns) الخاصة بأنظمة الهواتف الذكية
  • 5.00 / 5 5
  كيف وجدت هذا المقال؟  

ماذا لو شاركتنا رأيك؟

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *