نماذج تصميم للمبتدئين
نشرت: 2016-01-13إذا كنت قد كتبت بالفعل برامج لمنتجات أو تطبيقات برمجية ، كبيرة / صغيرة ، فمن المرجح أنك استخدمت الكثير من أنماط التصميم ... على الرغم من أنه من المحتمل أنها قد لا تكون من أكثر أنماط التصميم استخدامًا / القياسية.
لكن نعم ، هناك فرق واضح بين تنفيذ نمط تصميم و "استخدام" نمط تصميم ... وفي كلتا الحالتين ، يفهم الشخص الذي يعمل مع أنماط التصميم ذلك ، أو سيفهمه بسهولة.
النقطة المهمة هي أن أنماط التصميم ليست جديدة على المبرمجين.
في هذه المقالة أدناه ، أحاول شرح أنماط التصميم ، في أساسياتها ، وسندرس تفاصيل الأنماط المختلفة ، والأمثلة ، وما إلى ذلك في مقال آخر.
ما هو نمط التصميم؟
لتبدأ…
أعتقد أن أفضل طريقة للبدء في فهم أنماط التصميم ، هي فهم الأنماط غير التقنية التي نتبعها عن قصد / بغير علم في حياتنا اليومية.
على سبيل المثال ، لنأخذ الكثير من السير الذاتية المقدمة لوظيفة شاغرة. لا تبدو السيرة الذاتية للجميع متشابهة ... على الرغم من أنهم يميلون جميعًا إلى فعل الشيء نفسه ، أي إخبار القارئ بمهاراتهم ، أو كيف يمكن أن يكون مناسبًا للوظيفة.
إن الغالبية العظمى منهم ممن يقدمون السير الذاتية للوظائف ، يعرفون أنهم بحاجة إلى إرسال سيرة ذاتية مع مجموعة معينة من المعلومات في مستند Word منسق.
هذا ... هو نمط ، حيث يقدم كل شخص سيرة ذاتية مع مجموعة معينة من المعلومات المعبر عنها فيها.
إذا كنت ترغب في ... أطلق عليها قوالب بدلاً من الأنماط. قوالب التصميم.
هناك العديد من هذه الأشياء في الحياة الواقعية التي تعتبر أنماطًا. بعض الناس يحبون الأمثلة أدناه:
يقوم جميع الطهاة حول العالم بطهي البيتزا أو البطاطس المقلية بنفس الطريقة. على الرغم من أنها قد تتصدرها / تتذوقها بشكل مختلف. هذا هو النمط.
يتبع تصميم كل سيارة نمط تصميم أساسي ، وأربع عجلات ، وعجلة قيادة ، ونظام الدفع الأساسي مثل قابض فاصل التسارع ، وما إلى ذلك.
كل الأشياء التي يتم بناؤها / إنتاجها بشكل متكرر ، يجب أن تتبع حتمًا نمطًا في تصميمها ... سواء كان ذلك في السيارات أو البيتزا أو ماكينات الصراف الآلي ، أو أيًا كان ... حتى فرشاة الأسنان.
أصبحت التصميمات التي أصبحت تقريبًا طريقة قياسية لترميز بعض المنطق / الآلية / التقنية في البرنامج ، ومن ثم أصبحت تُعرف باسم - وبالتالي - تمت دراستها باسم أنماط تصميم البرامج.
لماذا نمط التصميم مهم؟
أساسًا لسببين:
- التمسك بالمعيار
- لربط التطور
سأشرح بالتفصيل.
أولاً ، نرى سبب كون التمسك بالنمط القياسي أمرًا مثيرًا للاهتمام.
لنأخذ مثال قائمة السير الذاتية التي ناقشناها من قبل.
قد يكون هناك واحد أو اثنان من المتقدمين الذين يرسلون طلبات التوظيف الخاصة بهم عن طريق نص البريد الإلكتروني دون التنسيق المناسب ، دون مرفقات في بريدهم الإلكتروني ، وما إلى ذلك ، .. لا يتبع هؤلاء المتقدمين واحد أو اثنين النمط .. وليس من المحتمل أن ينتهي بهم الأمر مع الوظيفة…. لماذا ا؟ لأنهم ينحرفون عن نمط راسخ ، والذي قد لا يحب من قبل الأشخاص المختارين في قائمة السير الذاتية للوظيفة.
ألا يوجد من ينحرف عن النمط ويصبح "رائعًا"؟ أليس هذا ابتكار؟
نعم ، هناك أوقات تحصل فيها السيرة الذاتية المقدمة بشكل مختلف تمامًا على الوظيفة لكونها مختلفة عن الآخرين. عادةً ما سمعت عن مصممي الويب الذين حصلوا على وظائف رئيسية لأنهم قاموا بتجميع وتقديم فيلم على قرص مضغوط لعملهم ، أو صنع شخصية رسوم متحركة تشرح عملهم ، ووضعوه على مدونتهم ، وأشياء من هذا القبيل.
لكن .. هذا هو التجريب ( الابتكار يأتي من التجارب الناجحة ).
غالبًا في تطوير البرامج ، لا يمكنك تحمل التجربة ، بسبب ضغط الجدول الزمني ، والتوقعات ، وما إلى ذلك ، ولكن نعم في بعض الأحيان ، تسمح بعض المشاريع المثيرة للاهتمام ببعض التجارب.
في البرامج ، لا يمكننا القيام بأشياء أساسية مثل الإيداع البنكي ... بـ 101 طريقة ... ستكون هناك طرق قليلة فقط لمعالجة الإيداع المصرفي .. لذا فمن المنطقي اتباع نمط ثابت ومختبر.
أيضًا ، تحتوي معظم أنماط التصميم على اختلافات ... بعض الاختلافات شائعة جدًا لدرجة أن الاختلافات ستكون أيضًا نوعًا قياسيًا جديدًا من النمط.
من المتوقع أن تتبع مشاريع البرمجيات هذه الأيام (ضمنيًا على الأقل) تصميمًا محددًا بالفعل لمنتج / برنامج مشابه في السوق.
هذا هو المكان الذي يساعد فيه التمسك بنمط قياسي من الترميز أو نمط التصميم في تطوير البرامج ... تثبيت التطوير ، وإزالة النفقات العامة للقلق بشأن تنفيذ جديد لم يتم اختباره ، وما إلى ذلك ،
وقت تطوير الربط
إن اتباع نمط تصميم معياري له أيضًا ميزة التواصل بسهولة من خلال شجرة / التسلسل الهرمي لمهندسي البرمجيات ، وقيادة الوحدة ، وقيادة الفريق ، والمطورين وما إلى ذلك ، حول "كيف" يجب تطوير شيء ما ، وليس فقط "ماذا" يجب أن يكون المتقدمة.
في بعض الأحيان تساعد فرق الاختبار ، لأن المختبرين سيعرفون من خلال التجربة أن الكود الذي يتبع أنماط تصميم معينة ربما يمكن اختباره بطريقة معينة باستخدام مجموعة من أدوات الاختبار في فترة زمنية معينة ، وقد لا تحتوي هذه التصميمات المعروفة على بعض العيوب أو لديها بعض العيوب "المعروفة".
ألا يؤدي استخدام أنماط التصميم إلى إضفاء لمسة شخصية؟
لا. أولاً لأننا لا نقول إنك تتبع نمط تصميم ولا يحدث أي شيء آخر. تشترك معظم تطبيقات المشروع في المتطلبات الأساسية فقط مع المشاريع الأخرى ، ومن المرجح أن يكون لها انحرافات. سيتطلب بناء هذه الانحرافات ثني وتمديد الأنماط القياسية المستخدمة في التنفيذ.

إنه مثل صنع البيتزا بالطريقة القياسية ، ثم نكهاتها / تقديمها لمتطلبات مختلفة ، إما بيتزا فطيرة كاملة ، أو قطع فطيرة ، أو أي شيء آخر.
لفهم أهمية أنماط التصميم ، هناك شيء واحد مهم جدًا ** :
أنماط التصميم ليست أي تقنية أو إطار عمل تفرضه علينا شركة معينة أو لغة برمجة. هذا يعني أنه مثل مفهوم مفتوح .. لك الحرية في تناوله واستخدامه وتعديله وفقًا لاحتياجاتك ، والأهم من ذلك ... الشعور به بنفسك.
في الواقع ، جميع أنماط التصميم القياسية أو الشائعة قابلة للتمديد بشكل كبير .. أصبحت شائعة ، أولاً ، فقط لأن الكثير من الناس يستخدمونها .. وكثير من الناس يستخدمونها فقط لأنهم مرنون لمتطلباتهم.
أو كيف تعتقد أن نمط التصميم القياسي يناسب مشروعًا في نيوجيرسي لشركة وأيضًا في بنغالور لشركة مختلفة ونوع مختلف من المشروع.
يقودنا ذلك إلى " معظم أنماط التصميم عامة " ... مما يعني أنها لا تُستخدم دائمًا لبناء نفس النوع من البرامج. قد لا تسمع أشياء مثل "نمط تصميم البرامج المصرفية" أو "نمط تصميم برامج الشبكات الاجتماعية" المستخدمة في المناقشات الشائعة ... ولكن فقط "أنماط التصميم".
من الذي يجب أن ينزعج بشأن أنماط التصميم؟
- تمامًا مثل الطريقة التي ينمي بها مهندس البناء الجيد مهاراته في تصميم المباني ، من خلال دراسة الهندسة المعمارية وتصميم العديد من المباني والأشكال طوال حياته / حياتها ، يجب على مهندس البرمجيات دراسة وتصور كيفية تصميم أنظمة البرامج / التكنولوجيا المختلفة في جميع أنحاء العالم أو معمارية.
- ومثلما يجب أن يكون عمال البناء في المبنى على دراية بالطرق المختلفة لتنفيذ تصميم المبنى ، إما من خلال تجربتهم الخاصة أو من خلال فهمه من مهندس المبنى.
يجب أن يفهم مطورو / مبرمجو البرمجيات أنماط تصميم البرامج الأساسية ورمز تنفيذها ... إما بأنفسهم أو من مهندس البرمجيات الذي يوجه الفريق لتطويره باتباع نمط معين.
أنماط التعليمات البرمجية الأساسية
في السطور الافتتاحية من هذا المقال ، قلت إن أي مبرمج كان سيستخدم أنماط تصميم. فيما يلي بعض الأمثلة الأساسية للتعليمات البرمجية التي تتبع نمطًا ما.
- فيما يلي نمط تصميم مرشح اعتراض أساسي.
- إخفاء كود النسخ
- [الشفرة]
التبديل (الحالة) {
حالة القيمة 1:
قيمة الحالة 2:
إفتراضي:
}
[/الشفرة] - مشغلات الأحداث ، معالجات الأحداث .. تأتي ضمن نمط تصميم مراقب الموضوع الأساسي. سنناقش كل معايير الأنماط ، والاختلافات الشائعة ، مع أمثلة .. قريبًا.
- إذا كنت قد استخدمت نوعًا من المجموعات ، مثل Arraylist في C # ، وتكررت عبر المصفوفة ، فقد استخدمت نمط تصميم تكراري أساسي.
- الكود أدناه هو مثال على نمط معالجة الاستثناءات الأساسي / سلسلة المسؤولية .
- إخفاء كود النسخ
- [الشفرة]
يحاول{
} catch (استثناءً) {
}
أخيرا{
}
[/الشفرة]
مجالات مختلفة لأنماط التصميم
هناك مصطلحات مختلفة في البرامج بخلاف أنماط التصميم .. بعضها يرتبط غالبًا بأنماط التصميم التي ناقشناها حتى الآن .. وبعضها غير مرتبط تمامًا.
ما ناقشناه أعلاه حتى الآن يسمى أحيانًا " أنماط تصميم التنفيذ ".
هناك أنماط أخرى ، مثل أنماط العمارة ، وأنماط الإطار ، وأنماط اللغة (تسمى في الغالب تراكيب اللغة).
إنها أنماط موضوعة على مستويات مختلفة ... مثل أنماط اللغة هي أنماط مطبقة كجزء من لغات البرمجة مثل C # / Java ، مثل ميزات / تركيبات اللغة .. بعضها رأيناه بالفعل.
يتم استيعاب جميع الأمثلة المذكورة أعلاه حول موضوع مراقب ، ومرشح اعتراض ، وما إلى ذلك ، باعتبارها تراكيب لغوية في جميع لغات البرمجة عالية المستوى الشائعة التي جاءت بعد C.
أنماط الهندسة المعمارية هي تلك النماذج القياسية لهندسة البرامج ، والتي تشير عادةً إلى طرق مختلفة لوضع أو ربط الوحدات أو الطبقات أو المستويات ، مما يشكل التطبيق الكامل.
هذا لا علاقة له تمامًا بأنماط التصميم بمعنى الترميز / البرمجة التي ... لكنها تشترك في نفس الإجابات على لماذا / ما الذي تمت مناقشته في هذه المقالة.
لا ترتبط أنماط الإطار أيضًا بمناقشتنا لأنماط التصميم. عندما تطبق أطر عمل مثل .NET وسائل خاصة لأخطاء التسجيل أو مسارات تنفيذ التعليمات البرمجية لتتبع بسهولة من خلال الأساليب أو الكائنات المضمنة في إطار العمل ، تتم الإشارة إلى هذه الآليات باسم أنماط الإطار.
تتضمن بعض الأمثلة في .NET Framework ميزة stackTrace ، وميزة سمة الفئة مع أقواس مربعة أعلى تعريفات الفئة / الطريقة ، وما إلى ذلك ، عند استخدام هذه الميزات ، نقوم بالتشفير باستخدام الأنماط المضمنة في Framework.
آمل أن تساعد هذه المقالة في تقديم نظرة عامة على أنماط التصميم والمصطلحات ذات الصلة.
حتى الآن ، ناقشنا فقط ماهية المعايير ومدى أهميتها .. لكننا لم نناقش ماهية الأنماط القياسية نفسها.
رخصة
هذه المقالة ، إلى جانب أي كود مصدر وملفات مرتبطة ، مرخصة بموجب ترخيص Code Project Open (CPOL).