Skip to content Skip to footer

SOLID Principal

مبادئ التصميم الثابتة لبناء أنظمة مستقرة ومرنة (SOLID)

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

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

بمستوى أعلى. مبادئ SOLID تعتبر معايير للبرمجة

من المهم أيضا معرفة مبادئ OOP

ماهي الفائدة من هذه المبادئ

عندما يقوم المبرمج بكتابة برنامج من دون اتباع معايير معينه ينتج عن ذلك تصميم سيء للبرنامج

مما يؤدي الى برنامج غير قابل للتوسع ومليء بالاخطاء البرمجية عند قيامك بأي تعديل لاحقاً

ولكن عندما تقوم ببرمجة وفقاً لهذه المبادئ سيكون لديك برنامج أبسط في الفهم لك وللمبرمجين الآخرين

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

مبادئ تصميم SOLID هي خمسة مبادئ تصميم برامج تُمكنك من كتابة تعليمات برمجية فعالة.

اسم SOLID هو اختصار مساعد للذاكرة حيث يمثل كل حرف مبدأ لتصميم البرامج

1 - Single Responsibility Principle

مبدأ المسؤولية الفردية هو أول مبدأ تصميم ل SOLID، ويمثله الحرف “S”

هو مبدأ المسؤولية الواحدة لكل جزء من البرنامج سواء كان Class او Functions

ينص على أنه في أي تطبيق مُصمم، يجب أن يرتبط كل صف بمهمة خاصة به.

واستخدام هذه المهمة يتم عند وجود سبب لاستخدام هذا الكود.

عندما يتعامل class مع أكثر من مهمة واحدة، فإن أي تغييرات يتم إجراؤها على الوظائف قد تؤثر على class الأخرى

أي وحده برمجية مثل Class أو Function وغيرها يجب أن يكون لها سبب واحد للتعديل

بمعنى أن يجب انه تحقق مهمة واحدة فقط

2 - Open Closed Principle

هذا المبدأ هو “O” لمبادئ SOLID الخمسة لتصميم البرامج

المبدأ الثاني بكل بساطة معناه أن يكون Class قابل لتمدد بدون مايتم التعديل على Class نفسه

وقابل للإضافة وتعديل المحتوى دون الحاجة إلى تعديل أي محتوى موجود مسبقاً

بمعنى انك يجب أن يتم تصميم Class بطريقة ما تمكنك من إضافة ميزات جديدة او تعديل سلوك المكونات الحالية

بحيث لا تطلب تعديل كبير في الكود البرمجي الحالي.

3 - Liskov Substitution Principle

مبدأ استبدال Liskov هو المبدأ الثالث لـ SOLID، ويمثله الحرف ” L”

كانت Barbara Liskov هي مَن قَدَم المبدأ في عام 1987 في حديثها الرئيسي في مؤتمرها بعنوان “تجريد البيانات”.

الصياغة الأصلية لمبدأ استبدال Liskov :

في برامج الكمبيوتر، إذا كانت S هي نوع فرعي من T، فيمكن استبدال كائنات من النوع T بكائنات من النوع S

أي، الكائنات من النوع S قد تحل محل كائنات من النوع T بدون تغيير أي من الخصائص المرغوبة

لذلك البرنامج الدقة، والمهمة المنجزة، وغير ذلك

إنه ينص على أن كائن الطبقة العليا يجب أن يكون قابلاً للاستبدال بواسطة كائنات الصفوف الفرعية الخاصة به

دون التسبب بمشاكل في التطبيق. لذلك، يجب ألا يغير الصف الفرعي خصائص الصف الأصل

4 - Interface Segregation Principle

مبدأ فصل الواجهة هو مبدأ تصميم SOLID الرابع الذي يمثله الحرف “I” في الاختصار.

كان Robert C Martin هو الذي حدد المبدأ في البداية بقوله

“لا ينبغي إجبار العملاء على الاعتماد على الأساليب التي لا يستخدمونها”

ويعني بالعملاء، الطبقات التي تنفذ واجهات، بمعنى آخر، يجب ألا تتضمن الواجهات وظائف كثيرة جداً.

العملاء -المبرمجين- لا يجب أن يجبرون على إنشاء Functions لا يستخدمونها.

بمعنى يجب علينا فصل Interfaces لتكون أصغر لتلبي احتياج العميل بدقة

على غرار المبدأ الأول SRP نقوم بفصل Interfaces لتقليل الأثار الجانبية والتكرار عن طريق فصل البرنامج لأجزاء صغيرة.

في التطبيق المصمم جيداً، يجب تجنب العبث بالواجهة (وتسمى أيضاً بالواجهات الضخمة).

الحل هو إنشاء واجهات أصغر يمكنك تنفيذها بشكل أكثر مرونة

5 - Dependency Inversion Principle

مبدأ عكس التبعية هو المبدأ الخامس والأخير لتصميم SOLID الذي يمثله ” D“ والذي قدمه Robert C Martin،

الهدف من مبدأ انعكاس التبعية هو تفادي الكود المرتبط بشدة بكود آخر، لأنه يكسر التطبيق بسهولة.

يهتم هذا المبدأ في المقام الأول بتقليل التبعيات (dependencies) بين وحدات الكود

يمكننا التفكير في الأمر على أنه يحتاج إلى low-level objects لتعريف العقود

مثل Interface التي يمكن أن تستخدمها high-level objects

دون الحاجة إلى أن تهتم بالتنفيذ بالضبط الذي توفره low-level objects.

“يجب ألا تعتمد النماذج عالية المستوى على النماذج منخفضة المستوى. يجب أن يعتمد كلاهما على مبدأ التجريد “

بمعنى آخر، تحتاج إلى فصل النماذج عالية المستوى عن المستوى المنخفض.

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

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

أن تعتمد على التجريد بدلاً من عمليات التنفيذ المحددة.

يذكر Robert C Martin أيضاً أن مبدأ انعكاس التبعية هو مزيج محدد من مبدأي Open / Closed وLiskov.

المصادر

بالتأكيد سوف تحتاج إلى دورة تعليمية لتعلم والتطبيق على هذه المبادئ

لذالك ارشح لك هذه الدورة المجانية بالكامل وباللغة العربية من المهندس محمد رضا.

SOLID Principles بالعربى

في الختام

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

في حال كبر حجم البرنامج لديك لانه سيكون قابل لإعادة الاستخدام وقابل للصيانة وقابل للاختبار بسهولة.