يا هلا بكل مهندسي ومطوري ديف بوينت الأعزاء
كلنا في بداياتنا البرمجية كنا بنكتب ملف واحد فيه 2000 سطر بنعمل فيه كل حاجة: بنقرا من الفورم، بنكلم الداتابيز، بنبعت إيميل، وبنطبع الـ HTML! الكود شغال؟ أيوة شغال.. بس أول ما العميل يطلب تعديل بسيط، بنلاقي نفسنا بنعدل في 10 ملفات والكود كله بيفرقع في وشنا!
هنا بيجي دور مبادئ SOLID الخمسة اللي وضعها روبرت مارتن (Uncle Bob)، وهي القواعد الذهبية اللي بتخلي كودك نضيف، مرن، وسهل الفحص والتطوير بدون صداع. تعالوا نفهمها بالبلدي وبالأمثلة العملية في PHP.
1. مبدأ المسؤولية الواحدة (S - Single Responsibility Principle)
القاعدة: الكلاس لازم يكون عنده سبب واحد بس للتغيير، يعني وظيفته محددة وواضحة.
2. مبدأ المفتوح والمغلق (O - Open/Closed Principle)
القاعدة: الكلاس لازم يكون مفتوح للإضافة والتوسع، لكن مقفول للتعديل على كوده الداخلي.
عاوز تضيف فودافون كاش أو فوري؟ اعمل كلاس جديد بينفذ نفس الـ Interface بدون ما تلمس الكلاسات القديمة!
3. مبدأ ليسكوف للتعويض (L - Liskov Substitution Principle)
القاعدة: لو عندك كلاس ابن مشتق من كلاس أب، لازم تقدر تستخدم الابن مكان الأب في أي مكان بدون ما يحصل أي كسر في منطق البرنامج أو استثناءات غير متوقعة.
4. مبدأ فصل الواجهات (I - Interface Segregation Principle)
القاعدة: متجبرش كلاس إنه ينفذ دوال في الـ Interface هو مش محتاجها ومش هيستخدمها.
5. مبدأ عكس الاعتمادية (D - Dependency Inversion Principle)
القاعدة: الكلاسات عالية المستوى متعتمدش على كلاسات منخفضة المستوى ملموسة، الاتنين يعتمدوا على تجريدات (Interfaces):
كلمة ختامية:
تطبيق مبادئ SOLID في الأول ممكن تحس إنه بيزود عدد الملفات، لكن مع كبر حجم المشروع هتحس براحة نفسية خرافية وإنت بتعدل أو تضيف ميزات جديدة بكل سلاسة وأمان.
أتمنى يكون الشرح بسيط وممتع، ولو في أي مبدأ حابين نتعمق فيه ونعمله أمثلة كود أكبر عرفوني في الردود!
كلنا في بداياتنا البرمجية كنا بنكتب ملف واحد فيه 2000 سطر بنعمل فيه كل حاجة: بنقرا من الفورم، بنكلم الداتابيز، بنبعت إيميل، وبنطبع الـ HTML! الكود شغال؟ أيوة شغال.. بس أول ما العميل يطلب تعديل بسيط، بنلاقي نفسنا بنعدل في 10 ملفات والكود كله بيفرقع في وشنا!
هنا بيجي دور مبادئ SOLID الخمسة اللي وضعها روبرت مارتن (Uncle Bob)، وهي القواعد الذهبية اللي بتخلي كودك نضيف، مرن، وسهل الفحص والتطوير بدون صداع. تعالوا نفهمها بالبلدي وبالأمثلة العملية في PHP.
1. مبدأ المسؤولية الواحدة (S - Single Responsibility Principle)
القاعدة: الكلاس لازم يكون عنده سبب واحد بس للتغيير، يعني وظيفته محددة وواضحة.
- غلط: كلاس
Userبيسجل المستخدم في الداتابيز، ويبعتله إيميل ترحيب، ويحسب نسبة الخصم! - صح: كلاس
UserRepositoryللداتابيز، كلاسEmailServiceلإرسال الإيميلات، وكلاسDiscountCalculatorللخصومات.
2. مبدأ المفتوح والمغلق (O - Open/Closed Principle)
القاعدة: الكلاس لازم يكون مفتوح للإضافة والتوسع، لكن مقفول للتعديل على كوده الداخلي.
PHP:
من فضلك قم , تسجيل الدخول أو تسجيل لعرض المحتوى
3. مبدأ ليسكوف للتعويض (L - Liskov Substitution Principle)
القاعدة: لو عندك كلاس ابن مشتق من كلاس أب، لازم تقدر تستخدم الابن مكان الأب في أي مكان بدون ما يحصل أي كسر في منطق البرنامج أو استثناءات غير متوقعة.
4. مبدأ فصل الواجهات (I - Interface Segregation Principle)
القاعدة: متجبرش كلاس إنه ينفذ دوال في الـ Interface هو مش محتاجها ومش هيستخدمها.
- بدل ما تعمل Interface عملاق فيه
fly(),drive(),swim()وتجبر كلاسCarينفذfly(). - قسمهم لواجهات صغيرة:
Drivable,Flyable,Swimmable.
5. مبدأ عكس الاعتمادية (D - Dependency Inversion Principle)
القاعدة: الكلاسات عالية المستوى متعتمدش على كلاسات منخفضة المستوى ملموسة، الاتنين يعتمدوا على تجريدات (Interfaces):
PHP:
من فضلك قم , تسجيل الدخول أو تسجيل لعرض المحتوى
كلمة ختامية:
تطبيق مبادئ SOLID في الأول ممكن تحس إنه بيزود عدد الملفات، لكن مع كبر حجم المشروع هتحس براحة نفسية خرافية وإنت بتعدل أو تضيف ميزات جديدة بكل سلاسة وأمان.
أتمنى يكون الشرح بسيط وممتع، ولو في أي مبدأ حابين نتعمق فيه ونعمله أمثلة كود أكبر عرفوني في الردود!