ليه بعض المشاريع البرمجية بتفضل ثابتة وقوية مهما زاد حجمها وتعقيدها، بينما مشاريع تانية أول ما تكبر شوية بتنهار وكل شوية يحصل فيها مشاكل وكأنها بيت ورق؟ 🤔
الحقيقة السر مش بس في الكود اللي مكتوب، لكن كمان في طريقة التفكير وتنظيم الكود.
وهنا بييجي دور مبادئ SOLID اللي تعتبر زي خريطة طريق لأي مهندس برمجيات عايز يكتب كود نظيف، قابل للتطوير، وسهل الصيانة.
كلمة SOLID اختصار لـ 5 مبادئ أساسية في البرمجة الكائنية التوجه (Object-Oriented Programming)، وكل مبدأ فيهم ليه دور كبير في تحسين جودة الكود.
تعال نفهم كل مبدأ بشكل مبسط:
📌 الـ Single Responsibility Principle (SRP) - المسؤولية الواحدة
ده معناه ببساطة إن كل كائن (class) في الكود بتاعك لازم يكون عنده وظيفة واحدة بس، وما يعمل أكتر من حاجة.
علشان لو حصل تغيير في أي جزء، ما تضطر تعدّل كل الكود، وبالتالي تقل الأخطاء وتبقى الصيانة أسهل.
📍 مثال عملي: تخيل معاك موظف في الشغل بيعمل كل حاجة من الحسابات لخدمة العملاء لتوصيل الطلبات. لو الموظف ده تعب، كل حاجة هتوقف! لكن لو كل موظف عنده وظيفة محددة، الدنيا هتبقى منظمة أكتر.
📌 الـ Open/Closed Principle (OCP) - مفتوح للتوسع ومغلق للتعديل
المبدأ ده بيقولك خلي الكود بتاعك جاهز للتطوير أو إضافة مميزات جديدة من غير ما تعدّل في الكود الأساسي.
علشان ما تكسر حاجات شغالة بالفعل وتبقى الميزة الجديدة زي طبقة إضافية فوق النظام القديم.
📍 مثال عملي: زي إنك تبني بيت وتسيب أماكن للتوسعات، بدل ما تضطر تهد الحيطان كل ما تحتاج تضيف أوضة جديدة.
📌 الـ Liskov Substitution Principle (LSP) - استبدال الأنواع الفرعية بالأساسية
لو عندك كلاس أساسي (Parent Class) وكلاس فرعي (Child Class)، الكلاس الفرعي لازم يقدر يحل محل الأساسي من غير ما يحصل أي مشاكل في الكود.
علشان تضمن إن الكود بتاعك يشتغل بشكل متماسك وسلس حتى لو استخدمت كائنات مختلفة.
📍 مثال عملي: زي إنك تشتري عربية جديدة، وأيًا كان الموديل، لازم تقدر تسوقها بنفس الطريقة من غير ما تتعلم حاجة جديدة تمامًا.
📌 الـ Interface Segregation Principle (ISP) - تقسيم الواجهات
المبدأ ده بيقول: ما تجبر الكلاسات تستخدم حاجات مش محتاجاها. لو فيه واجهة (Interface) كبيرة ومعقدة، قسمها لواجهات صغيرة خاصة بوظائف محددة.
علشان ما تخلي الكود مليان حاجات مش ضرورية أو ملهاش علاقة بالكلاس.
📍 مثال عملي: زي إنك تطلب اشتراك في صالة جيم، وما تلاقي نفسك مجبر تدفع لحاجات زي الساونا وحمام السباحة وأنت أصلًا عايز تتمرن بس!
📌 الـ Dependency Inversion Principle (DIP) - عكس التبعية
هنا المبدأ بيقول إنك لازم تخلي الكود بتاعك يعتمد على واجهات مجردة (Abstractions) بدل ما يعتمد على تفاصيل محددة (Implementations).
علشان التعديلات تبقى أسهل وماتربط الكود بتفاصيل صغيرة ممكن تتغير في أي وقت.
📍 مثال عملي: زي إنك تستخدم شاحن USB عام بدل ما تعتمد على شاحن نوع معين، لأن أي شاحن تاني ممكن يشتغل على نفس الجهاز.
📌 ليه الـ SOLID مهمة؟
بتخلي الكود بتاعك سهل القراءة والفهم.
بتقلل من الأخطاء اللي بتحصل لما تضيف مميزات جديدة.
بتوفر وقت كبير في الصيانة والتعديلات.
بتخليك جاهز لأي تحديات جديدة أو تغييرات في المشروع.
وفقكم الله لكل خير 🌿