مبادئ SOLID في البرمجة كائنات C# شرح مبسط

x32x01
  • بواسطة x32x01 ||
لو عمرك شوفت مصطلح SOLID Principles وفضلت تقول:
"هو الموضوع ده مهم ليه؟ وليه كل الناس بتتكلم عنه؟"
يبقى البوست ده مكتوب مخصوص ليك 💛

المبادئ دي هتغيّر طريقة تفكيرك في كتابة الكود حرفيًا.
هتساعدك تكتب code:
  • نضيف
  • سهل التطوير
  • مرن في التعديل
  • مش بيكسر الدنيا كل ما تعدل فيه
الموضوع بسيط… بس محتاج تفهمه صح.

الكلمة SOLID هي اختصار لـ 5 مبادئ في الـ OOP:
Code:
S - Single Responsibility Principle
O - Open/Closed Principle
L - Liskov Substitution Principle
I - Interface Segregation Principle
D - Dependency Inversion Principle



1. Single Responsibility Principle (SRP)​

يعني الكلاس يكون مسؤول عن حاجة واحدة بس.

مثال واقعي:​

متخيل شيف المطعم يكون:
  • بيطبخ
  • بيحاسب الزباين
  • بينضف المطبخ
أكيد الشغل هيبقى مكركب.

نفس الكلام في الكود:
لو عندك كلاس بيعمل كذا حاجة → لما تيجي تعدل فيه هتكسر حاجة تانية.

مثال C# قبل الإصلاح:​

C#:
class OrderProcessor
{
    public void SaveOrder(Order order) { ... }
    public void SendEmail(Order order) { ... }
    public void LogError(Exception ex) { ... }
}

الحل:​

فصل المسؤوليات:
C#:
class OrderRepository { public void Save(Order order) { ... } }
class EmailService { public void Send(Order order) { ... } }
class Logger { public void Log(Exception ex) { ... } }



2. Open / Closed Principle (OCP)​

الكود يكون:
  • مفتوح للإضافة ✅
  • مغلق للتعديل ❌
يعني لو عايز تضيف ميزة جديدة، متعدلش الكود القديم.

مثال:​

بدل ما تعمل if shape is circle ... if rectangle...
استخدم interface:
C#:
interface IShape
{
    double Area();
}

class Rectangle : IShape
{
    public double Area() => Width * Height;
}

class Circle : IShape
{
    public double Area() => Math.PI * Radius * Radius;
}

class AreaCalculator
{
    public double Calc(IShape shape) => shape.Area();
}



3. Liskov Substitution Principle (LSP)​

لو كلاس B وارث من A لازم ينفع تستخدمه مكان A بدون مشاكل.

أشهر مثال:​

Square لا يصلح أن يرث من Rectangle
لأن المربع لازم عرضه = ارتفاعه، بينما المستطيل لا.

الحل؟
يُفضّل يعملوا implement لـ IShape بدل الوراثة.



4. Interface Segregation Principle (ISP)​

متجبرش الكلاس يستخدم ميثود هو مش محتاجها.

مثال:​

بدل:
C#:
interface IWorker { Work(); Eat(); Sleep(); Manage(); }
قسمها:
C#:
interface IWork { void Work(); }
interface IEat { void Eat(); }
interface ISleep { void Sleep(); }
interface IManage { void Manage(); }



5. Dependency Inversion Principle (DIP)​

اللي فوق (Business Logic) ميعتمدش على اللي تحت (Implementation).
الاثنين لازم يعتمدوا على Interfaces.

قبل:​

C#:
class OrderService
{
   SqlDatabase db = new SqlDatabase();
}

بعد:​

C#:
interface IDatabase { void Save(Order order); }

class SqlDatabase : IDatabase { ... }
class OrderService
{
   private IDatabase db;
   public OrderService(IDatabase database) { db = database; }
}
ده اسمه Dependency Injection.



خلاصة الكلام 🎯

لو فهمت SOLID:
  • الكود هيبقى نظيف
  • سهل يتوسع
  • قليل المشاكل
  • ومحدش هيكره يشتغل بعدك 😄
 
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
7
x32x01
x32x01
x32x01
الردود
0
المشاهدات
55
x32x01
x32x01
x32x01
الردود
0
المشاهدات
688
x32x01
x32x01
x32x01
الردود
0
المشاهدات
107
x32x01
x32x01
x32x01
الردود
0
المشاهدات
390
x32x01
x32x01
x32x01
الردود
0
المشاهدات
650
x32x01
x32x01
x32x01
الردود
0
المشاهدات
7
x32x01
x32x01
x32x01
الردود
0
المشاهدات
607
x32x01
x32x01
x32x01
الردود
0
المشاهدات
931
x32x01
x32x01
x32x01
الردود
0
المشاهدات
851
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,983
المشاركات
2,183
أعضاء أكتب كود
479
أخر عضو
as6318380@gmail
عودة
أعلى