Home هندسة برمجيات SOLID مقدمة لل SOLID
مقدمة لل SOLID

مقدمة لل SOLID

1.10K
4

ال SOLID هي اختصار لمجموعه من العادات والتي إن قمت باتباعها سوف تحصل على كود أكثر قابلية للصيانة وأسهل في التغيير والتكيف مع متطلبات المشروع المتغيرة Adaptive Code.

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

ال SOLID هي لكي تحصل على الكود المرن القابل للتكيف والتغير في حال، مثلاً لم يكن الحل الأول مناسباً لحل المشكلة أو لم يكن مناسباً بعد التغيير في المتطلبات فهو يعطيك المرونة والقابلية للتغير

من المهم معرفة أن ال SOLID هي عبارة عن مجموعة من المفاهيم والأفكار، وليست عبارة عن مكتبة أو دالة تستطيع استدعائها أو حتى فريم وروك بلغة معينة، وهذا يعني أن هذه المفاهيم تطبق على كل اللغات البرمجية سواء جافا أو سي++ أو سي# أو أي لغة أخرى، وهذا شيء جيد فهذا يعني أنك تستطيع بشكل عام قرائة أي مقالات تتحدث عن ال SOLID بغض النظر عن اللغة التي تستخدمها، ونفس الأمر في سلسلة المقالات التي سنطرحها لهذه المفاهيم حيث تستطيع تطبيقها في اللغة التي تشاء.

كثير من المبرمجين يستخدموا اللغات الكائنية OOL مثل جافا وسي# ولكن لا يكتبوا أكواد كائنية بشكل صحيح، وانما يقوموا بأول خطوة فقط، حيث يتم كتابة كلاسات تمثل المفاهيم الواقعية مثلاً Book أو Animal أو Employee ولكن في الأخير يتم استخدام هذه الكائنات ضمن سياق اجرائي Procedure Logic وقد يظن المبرمج أن هذه هي ال OO ولكنها في الحقيقة هي مجرد استخدام كائنات ولكن ضمن Procedure Logic. وبالرغم من أنه يستخدم لغات OOL الا أن طريقة تصميم الكود هي إجرائية اكثير من كونها كائنية فكتابة كود بلغة OOL لا يعني ان الكود نفسه هو OO.

لكن ان طبقت ال SOLID فسوف يكون أكثر OO، لذلك ال SOLID هي تعتبر مفتاحك الأساسي للدخول في عالم البرمجة الكائينية الحقيقية. ولا تستغرب أنها يطلق عليها أحياناً بأنها “أساسيات التصميم الكائنية Principle of object oriented design” وهي حقاً كذلك.

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

البداية

robert_cecil_martinهذه الأفكار ليست جديدة، حيث قدمها Bob Martin مهندس البرمجيات المعروف بأنكل بوب منذ حوالي 16 سنة في عام 1995 وسماها بأساسيات التصميم الكائنية وبعد ذلك قام Michael Feathers (صاحب الكتاب Working Effectively with Legacy Code ) بترتيب هذه المفاهيم حتى تشكل اختصاراً يسهل تداوله بين المبرمجين.

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

في هذا السلسلة من المقالات التي سنطرحها قريباً ان شاء الله، سوف نناقش كل مفاهيم ال SOLID ونشرح ماذا تعني بالضبط، وفي الحقيقة كل حرف هو اختصار لمفهوم وهي كالتالي:

  1. S –  Single Responsibility principle
  2. O  – Open/Closed Principle
  3. L  – Liskov substitution principle
  4. I  – Interface Segaration
  5. D  – Dependency Injection

solid

  • رقم 1 ال SRP تعني أن لكل كلاس يجب أن تكون سبب واحد للتغيير
  • رقم 2 ال OCP تعني ان الكلاس يجب أن يكون قابل للإضافات ومغلق لتعديلات
  • رقم 3 ال LSP تعني كيف يجب أن تعمل ال polymorphism وليس كيف تعمل وانما كيف يجب أن تعمل
  • رقم 4 ال ISP تعني كيف يمكن ان تصمم ال Interfaces
  • رقم 5 ال DIP وهي تصف العلاقة بين ال Abstraction وال Concrete Type وأنه يجب ان تعتمد على ال Abstraction.

سوف يتم تناول كل من هذه المفاهيم في مقالات منفصلة ويتم تحديث هذه المقدمة بروابط المقالات متى ما انتهت.

من المهم ايضاً تذكر أنه لا يوجد أي ترتيب في هذه المفاهيم من ناحية الأهمية، فمثلاً لا يعني ان SRP أكثر أهمية من OCP أو ال OCP أقل أهمية من ال SRP، وانما ظهرت بهذا الترتيب حتى تشكل اختصار جميل SOLID.

solid2

ايضاَ هناك علاقة بين هذه المفاهيم، فاذا اخذت كل منهم بشكل معزول عن الاخر وطبقته فسوف تحصل على فائدة ولكن ليست كبيرة، بعكس عندما تأخذ كل المصطلحات ككتلة واحدة package وتطبقها فسوف تحصل على الكثير من الفوائد. فاذا كان لديك كود وتريد جعله more solid (وهنا نعنى كود أفضل) فلا تقوم مثلاً بتطبيق ال SRP على كافة الكود اولاً ثم تطبيق بعد فترة المفهوم الثاني وهكذا، بل تأخذ جزء من الكود وتطبق عليه المفاهيم مجتمعة وهذا يجعله more solid.

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

متى تستخدم ال SOLID

ال SOLID عادة تستخدمها لإصلاح بعض المشاكل في التصميم design smell فاذا كان الكود لديك فيها بعض ال smells فال SOLID يكون مناسباً لإصلاح هذه المشكلة (راجع المقالة ما هي رائحة الكود للمزيد عن ال Code Smell) ، وقد لا يكون ال SOLID مناسباً إذا كانت لديك مشاكل أخرى على أي حالة.

لكن بعض الأشياء التي يمكن ان تحلها ال SOLID هي:

  • الكود يصعب التغيير او التعديل عليه Rigidity وربما لديك تصميم جيد للمشكلة ولكن بمجرد أن يأتي طلب جديد new requirement فمن الصعب تطبيق ذلك الطلب لأن التصميم جامد
  • التصميم يسهل جداً كسره Fragility بواسطة اي مبرمج جديد أو ان التصميم صعب إعادة استخدامه Immobility وتحتاج لتكرار الكود في أكثر من مكان.

مقالات مقترحة:

قبل الشروع في السلسلة فمن المفيد أن يكون لديك معلومات أساسية حول ما يلي:

ماذا تعرف عن ال Coupling وال Cohesion في تصميم البرمجيات ؟

كتاب البرمجة باستخدام ال interface

 

المصادر:

(1098)

وجدي عصام مهندس برمجيات مهتم بعلوم الحاسب وبالأخص مجال الخوارزميات وهندسة البرمجيات وحماية التطبيقات،

Comment(4)

  1. شكرا جزيلا على هذا الموضوع الرائع الذي يعاني من فهمه الكثير من المبتدئين مثلي اتمنى ان تكملو هذه السلسلة و وفقكم الله

  2. مقال جدا رائع كالعادة
    اتمنى ان تحتوى المقالات القادمة على امثلة برمجية لتوضيع معنى كل principle من ال SOLID principles
    اتمنى ايضا ان تكون هذه الامثلة على لغة مثل php لان بعض الناس يظن ان مثل هذه المبادىء لا يطبق الا على اللغات الكبيرة جدا مثل java ولا يمكن تطبيقة مع لغة مثل php

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

LEAVE YOUR COMMENT

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

مشاركة