مدخل إلى مبادئ ونماذج تصميم البرمجيات Software Design Principles and Patterns

0

مقدمة

تتأثر جودة البرمجيات بمستوى التصميم Design الذي تم اعتماده من قبل الفريق الذي يسهر على تطويرها، حيث يلعب تصميم البرمجيات دورا كبيرا في جعلها قابلة للصيانة والتحديث Maintainable، ومفتوحة على الزيادة والتوسيع Extensible، وقادرة على الخضوع للاختبارات Testable التي من شأنها التحقق من سلامة اشتغال مختلف أجزاء البرنامج وأدائها للمطلوب منها بالشكل المتوقع. لذلك ينبغي أن يولي كل مشتغل في مجال صناعة البرمجيات أهمية كبيرة لعملية التصميم نظرا لتأثيرها المباشر على جودة المنتوج المقدم.
ولا يمكن للتصميم أن يكون ناجحا إلا إذا كان يمنح المزايا الثلاثة التي تقدم ذكرها وهي كالآتي:
-القابلية للتحديث والصيانة: إذ يلزم أن يكون المشروع قابلا للتحديث في أي وقت دون أن يكون لهذه العملية تأثير سلبي على باقي أجزاء المشروع.
-القابلية للزيادة والتوسيع: كل مشروع لا يسمح بإضافة أجزاء جديدة عليه، أو توسيع أجزاء موجودة مسبقا، دون أن تتأثر باقي المكونات بشكل سلبي، فهو مشروع ناقص ومحدود.
-القابلية للاختبار: الاختبارات مهمة جدا لضمان سلامة اشتغال أجزاء المشروع، ولكي يكون المشروع قابلا للاختبار عليه أن يكون منضبطا لمجموعة من القواعد التابعة لمجال التصميم.
عملية تصميم البرمجيات ترتكز على مجموعة من المبادئ والنماذج Principles and Patterns التي وضعها أناس متضلعون في هذا المجال بغرض حل إشكاليات تعرضوا لها باستمرار، فقاموا بتقديم حلول جاهزة يمكن لأي مطور أن يستعملها في وضعيات مماثلة.
أغلب هذه الحلول - التي تأتي على شكل مبادئ ونماذج - متوافقة بشكل كبير مع نمط البرمجة كائنية التوجه Object Oriented Programming Paradigm، حيث تستعمل هذه المبادئ والنماذج مفاهيم البرمجة الكائنية مثل الوراثة Inheritance وتعدد الأشكال Polymorphism و التجريد Abstraction وغيرها من أجل صياغة حلول متكاملة ومنظمة.
الهدف من وراء هذه المقالة أن نعرف بمجال تصميم البرمجيات وماله من تأثير بالغ على نجاح البرمجيات، لأنني شخصيا عانيت من عواقب تغييب ممارسات هذا المجال، فاضطررت في مرات عديدة إلى إعادة بعض المشاريع من الصفر لأنني لم أحترم فيها مبادئ ونماذج التصميم، الشيء الذي جعل هذه المشاريع منغلقة على ذاتها غير قابلة للتوسيع أو الصيانة، إضافة إلى صعوبة العودة إلى الكود وتفحصه وتتبعه بغرض تجويده وتحسينه أو بغرض إصلاحه وتصويبه فيما يعرف بعملية Refactoring، ناهيك عن إمكانية كتابة اختبارات على هذه الأكواد وخصوصا الاختبارات الأحادية Unit Tests، فقد كان ذلك ضربا من الوهم لأن الكود الذي كنت أكتبه كان هو الوهم نفسه :). 
فتعلمت من الأخطاء السالفة إلزامية الإلمام بمجال التصميم في صناعة البرمجيات، وتكييف الوضعيات البرمجية مع مبادئ التصميم Design Principles، فأحببت أن أشارككم هذه المعلومات على هيئة مقالات. 

ماهي مبادئ التصميم Design Principles

مبادئ التصميم هي مجموعة من القواعد والتوجيهات التي توضح لنا كيف ينبغي أن يكون شكل وسلوك الكود الذي نقوم بكتابته، حيث تفرض علينا مجموعة من القيود التي بالانضباط لها سنكتب كودا نظيفا Clean Code، قابلا للصيانة Maintainable، قابلا للزيادة والتوسيع Extensible، وقابلا للاختبار Testable كالاختبارات الأحادية Unit Tests، والغرض من هذه المبادئ هو تمكين المطور من التخلص من العادات السلبية التي تدفعه إلى التركيز على الوصول إلى الحل فقط دون الأخذ بعين الاعتبار جودة هذا الحل، ومدى قدرة هذا الحل على التكيف مع باقي أجزاء المشروع بحيث لا يؤدي تعديله إلى سلسلة من الكوارث، ومدى قابلية هذا الحل إلى التوسيع بحيث لو أردنا في المستقبل أن نضيف إليه أمورا جديدة أمكننا ذلك بكل يسر، والأهم من هذا وذاك مدى موافقة هذا الحل لمواصفات الاختبارات الأحادية ليخضع لها بغرض التأكد من أنه يؤدي المطلوب بالشكل المرغوب.
توجد العديد من مبادئ التصميم مثل مبدأ DRY اختصارا ل Don’t Repeat Yourself، والذي يقضي بأن التعليمات البرمجية لا ينبغي أن تتكرر في أكثر من مكان، ويجب تفادي ذلك عبر استعمال الوظائف Methods مثلا، بحيث بدل تكرار كتابة الأوامر نقوم بتجميعها في وظيفة واحدة ونستدعيها كلما احتجنا إليها.
توجد كذلك المبادئ الخمسة الشهيرة باسم SOLID والتي سنراها بالتفصيل في مقالات قادمة إن شاء الله.

ماهي نماذج التصميم Design Patterns

نماذج التصميم هي حلول عملية تم بناؤها لتناسب وضعيات برمجية معينة، والغرض الأساسي منها هو توفير حلول برمجية لمشاكل شائعة، هذه الحلول تم اختبارها مرات ومرات وأثبتت نجاعتها، لذلك حينما تجد نفسك في وضعية برمجية من الممكن استعمال نموذج للتصميم فيها لا داعي لأن تتعب أعصابك في كتابة حل قد سبقك إليه غيرك، فقط قم بتطبيق هذا الحل واستمتع بالنتيجة.
إذن فنماذج التصميم Design Patterns هي حلول برمجية عملية عامة يمكنك استعمالها في وضعيات برمجية معينة، ويوجد العديد من نماذج التصميم مثل Repository الذي يسمح لنا بتجميع العمليات الممكن أن نقوم بها على البيانات في مكان واحد، أو مثل Singletone الذي يسمح لنا باستعمال Object واحد من نوع معين، وكذلك Factory الذي يسمح لنا بإنشاء الكائنات من أنواع أخرى، والعديد من نماذج التصميم وأشهرها GoF اختصارا ل Gang of Four وهي مجموعة من نماذج التصميم التي صاغها ثلة من المحترفين في مجال تصميم البرمجيات.

ماهو الفرق بين مبادئ ونماذج التصميم

الفرق بين مبادئ التصميم Design Patterns ونماذج التصميم هو الفرق بين ما يقوله المهندس وبين ما يفعله البناء، الأول يعطيك تعليمات وتوجيهات عامة لتكون المنشأة موافقة لمعايير البناء الجيد، والثاني يقوم باستعمال حلول فعلية لإنجاز عملية البناء، فطريقة وضع اللبنة استعملها عدة بنائين، وطريقة تبليط الحائط كذلك، وهكذا دواليك،..
فحينما نتحدث عن توجيهات عامة فنحن نتحدث عن مبادئ التصميم Design Principles، وحينما نتحدث عن حلول عملية لوضعيات معينة فنحن نتحدث عن نماذج التصميم Design Patterns.
يمكننا باختصار أن نقول أن الفرق بين مبادئ التصميم ونماذج التصميم هو أن هذه الأخيرة تعنى بالمستوى المنخفض المتعلق بالحلول البرمجية لوضعيات معينة، بينما مبادئ التصميم تعطيك قواعد ومبادئ عامة على مستوى أعلى لكي توظفها في مشاريعك بغرض تجويدها.

لا يوجد تعليقات

أضف تعليق