دليلك للتعرف على أنماط التصميم (Design Patterns)

دور المبرمج الفعلي لا يقتصر على البرمجة، بل يتمثل في حل المشكلات التي تواجهه وتواجه الشركة أو مجموعة من الأشخاص. لذلك، يحتاج المبرمج إلى أن يكون شخصًا قادرًا على حل المسائل والمشكلات قبل كونه برمجيًا ناجحًا. وعلى الرغم من ذلك، فإنه في بعض الأحيان يمكن استخدام تجارب الآخرين واتباع حلولهم. مع مرور الوقت، تصبح بعض المشكلات شائعة وتتكرر باستمرار. غالبية البرامج، إن لم نقل جميعها، تشترك في بعض الحلول النمطية، وبالتالي قام بعض المطورين بجمع هذه الحلول وتسميتها "أنماط التصميم" أو "Design Patterns" في هذه المقالة سوف نستكشف مفهوم أنماط التصميم وأقسامها وبعض المصادر التي يُستخدَم من أجل تعلًٌٌٌٌٌٌَُُُُّ.' Note: As an AI language model, I do not know the Arabic language, so I have provided the best possible translation based on my programming. Please consider this output for reference only and seek help from a human translator for your official or professional documents.

دليلك للتعرف على أنماط التصميم (Design Patterns)


 ما هي انماط التصميم ؟

تشمل هذه الحلول البرمجية أنماطًا متعددة وشائعة في تصميم البرامج. وتهدف إلى حل المشكلات الشائعة التي تواجه صانعي البرامج، مما يتيح لهم استخدام هذه الحلول في مختلف السيناريوهات. يتطلب استخدام هذه الأنماط التأكد من سهولة تحريرها وصيانتها، بالإضافة إلى سهولة اختبار كود التصميم باستخدام هذه التقنية. بخلاف ما يعتقده الجميع، لا يوجد عدد محدد والفرق هو الشهرة فقط، وهي متاحة بكميات كبيرة بعضها مشهور وبعضها غير مشهور. ربما أكثر التصاميم شهرةً هي Singleton أو MVC أو MVVM... وغير ذلك جميعها تصاميم.

 تاريخ انماط التصميم

من الواضح من مقالة ويكيبيديا أن أنماط التصميم كانت لأول مرة في عام 1977. اشتهرت هذه الأنماط بعد نشر كتاب Design Patterns: Elements of Reusable Object-Oriented Software في عام 1994 من قبل مجموعة من المبرمجين المعروفين باسم Gang of Four. بعد ذلك، انتشر استخدام هذه الأنماط بشكل واسع بين المبرمجين، لدرجة أصبح الأستخدام شائعًا جدًا لهذه التقنية. نلاحظ بين الحين والآخر ظهور أنماط جديدة، وما زالت الأنماط الجديدة تستمر في الإصدار حتى الآن.

 فوائد انماط التصميم :

- توفير الوقت و الموارد :

وقتاً وجهداً كبيرين في تصميم البرنامج الخاص بك. لذلك، يجب عليك إتقان الأساليب المختلفة والرائدة في مجال التصميم للحصول على أفضل حلول التصميم، وذلك من أجل توفير الوقت والإنتاجية في عملية التطوير. مصادر الجهاز الذي يتم استخدامه.

- سهولة التعديل :

إن وجهتك المشاكل في برمجياتك هي تعديل الكود، فهذا يمكن أن يحدث بسبب توظيف الشركات للمبرمجين الجدد باستمرار. ففهم الكود وتعديله يعتبر صعبًا دائمًا، حتى إذا كان الكود مصطفًى من قبل. والأنماط التصميم (Design Patterns) توفر حلول مألوفة لدى المبرمجين في مثيلات قطع برامجهِم، فإذا رآى أي شخص على سبيل المثال كلاس به نَّقْش Singleton، فسيرتدي على أئِنَّة في مَصْطَلاح التقنية وسيستطِيع إزالة المُشَغُّل. يحمل هذا الكلاس مسؤولية فورية بسبب استخدام نفس المنهج في برمجية سابقة.

 سهولة اختبار الكود :

اختبار الخوارزميات هو من أصعب التحديات التي يواجهها المطور بشدة. إذا كنت تريد تصميم نمط وضع تطبيقك بسهولة في اختباره، فعليك التأكد من أن مصدر الكود ليس من كيس دوت كوم. إذا لم تكن تفحص بالفعل رمز التطبيق الخاص بك، فأنت في حالة سيئة جدًا.

 سلبيات انماط التصميم :

ببساطة، بعض أنماط التصميم لا تقدم بعض الفوائد المذكورة (مثل اختبار رمز البرمجة)؛ على سبيل المثال، فإن Singleton يجعل من الصعب اختبار فئة من هذا النوع. بالإضافة إلى ذلك، هذه الأنماط ليست دائمًا مناسبة، لذلك يجب عليك اتخاذ قرارات ذكية في التحديد حول استخدامها. يُشير استخدام هذه الأنماط بشكل مفرط إلى أنه قد يزيد مستوى ارتفاع نسبة سكر الدم وضغط الدم. يمكنك تصوير هذه العبارة على أنها توصية مقدمة منا.

تلقت هذه الأنماط العديد من الانتقادات، ويبدو أن كل نمط قد انتقده شخص ما، ويمكنك التعرف على الانتقادات الموجهة لكل نمط بحرية.

 اقسام انماط التصميم :

توجد في المقام الأول 24 نمط تصميم مذكور في الكتاب، وهي تنقسم إلى ثلاثة أقسام، إلا أنه ظهرت بعض أنماط التصميم عند مبرمجين آخرين هنا وهناك، ما جعل عددها أكبر من ذلك.
يُنقسم نمط التصميم، ويُعرف بـDesign Patterns، إلى عدة فروع، حيث يشمل كل فرع مجموعة من الأنماط التي تخدم هدفًا مشتركًا، وهنا بعض الأنماط المشهورة.

تتعلق الأنماط المتعلقة بإنشاء الكلاس بالتصاميم البرمجية.

تحتوي مجموعة الأنماط الستة على تفاصيل مرتبطة بإنشاء الكائنات المسمى بـ "Objects"، حيث يعد أبرزها:

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

أنماط تتعلق بتنظيم الصفحة - هيكلية.

هناك 7 نماذج مختلفة تتعلق بتصميم الفصول الدراسية وكيفية عملها. لن أشرح تعريفاتها هنا لأنها صعبة التفسير وتحتاج إلى شرح وافٍ. في النهاية، لا يُمكن أن يوفر التعريف معلومات كافية حول أي نمط تصميم، وإنَّــــَــَ️مَّا يسوِّق الأسلوب بشكل عام لزيادة إثارة فضولك في استخدامه.

  1. نمط Adapter
  2. نمط Composite
  3. نمط Proxy
  4. نمط Flyweight
  5. نمط Facade
  6. نمط Bridge
  7. نمط Decorator

الأنماط المتعلقة بسلوك الكائنات - سلوكية :

هذا نص يتحدث عن 12 نمط مختلف يتعلق بطريقة التواصل بين الكائنات، وهذه النماذج لديها قابلية الانفصال والمرونة. تشبه هذه الموديلات Structural مفصلاً قسام الأجزاء، لذلك فلا يمكن وضع تعريف دقيق لهذه الموديلات في سطر واحد. ومع ذلك، فإن لديك قائمة عامة بأساليب تصميم سلوك الكائنات.

  1. نمط Template Method
  2. نمط Mediator
  3. نمط Chain of Responsibility
  4. نمط Observer
  5. نمط Strategy
  6. نمط Null Object
  7. نمط Command
  8. نمط State
  9. نمط Visitor
  10. نمط Interpreter
  11. نمط Iterator
  12. نمط Memento

 انماط اخرى : 

كما ذكر سابقًا، هناك العديد من أنماط التصميم المختلفة والتي يمكن تقسيمها إلى عدة فروع، والتي ذُكرت سابقًا ليست الوحيدة. بل يوجد أشكال تصميم أخرى تتعلق ببنية المشروع، مثل الأشكال المرتبطة بالتزامن وغيرها. تحتوي هذه الجدول التالية (والتي جُلِبَتِ من ويكيبيديا) على بعض هذه الأشكال.

 بعض المصادر لتعلم انماط التصميم :

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

- قناة Christopher Okhravi على اليوتيوب

يتميز هذا الفرد بأسلوب مذهل في توضيح أنماط التصميم بعيدًا عن الشاشة وبروية جديدة كليًا، والتي لم أجدها مملاً أبدًا في مقاطع الفيديو؛ حيث يكاد يكون هذا النوع من المحتوى نادرًا على يوتيوب. ولهذه الأسباب، فإنه بالنسبة لي، فإن هذا الشخص هو أفضل يoutuber، على الأقل في مجال الترميز.

- كتاب head first to design patterns

المحتويات، فإن هذا الكتاب يعد مفيدًا لمن لا يعرفون الكثير عن تصميم البرامج والأنماط المختلفة. يقدم الكتاب شرحًا وافيًا لكل نمط بشكل منفصل، فضلاً عن مبادئ تصميم البرامج. من الجميل أن Christopher Okhravi - صاحب القناة الأولى - يعتد على هذا الكتاب في أغلب حالاته، لذا سيكون من المفيد متابعة الاثنين. كتجربة شخصية، يجب بدء التعلُّم من خلال الكتاب قَبْلَ المضي قدِمًا إلى المادة المرئية.

بعض المواقع يوضح طرق التصميم.

  1. منصة المتوسط: يوجد على هذه المنصة مئات الآلاف من الكتابات في مجالات مختلفة، بما في ذلك أساليب التصميم.
  2. موقع sourcemakingفي بعض الأحيان يصعب عليّ فهم بعض الأنماط، لذلك استخدمت هذا الموقع لرؤية بعض الأمثلة، وبالمقارنة مع كتاب "هيد فرست"، الموقع يحتوي على صور أفضل.
  3. موقع refactoring لا أعرف ما هي الصلة بينه وبين موقعه السابق، ولكن لديهما نفس التصميم تقريبًا ونفس طريقة الشرح.
  4. موقع journaldevيمكن أن يحتوي هذا الموقع في بعض الأحيان على بعض الأخطاء، ولكنه لا يزال مفيدًا.
تعليقات
ليست هناك تعليقات
إرسال تعليق



    وضع القراءة :
    حجم الخط
    +
    16
    -
    تباعد السطور
    +
    2
    -