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

x32x01
  • بواسطة x32x01 ||
  • #1
لو عمرك شوفت مصطلح 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
المشاهدات
468
x32x01
x32x01
x32x01
الردود
0
المشاهدات
867
x32x01
x32x01
x32x01
الردود
0
المشاهدات
1K
x32x01
x32x01
x32x01
الردود
0
المشاهدات
922
x32x01
x32x01
x32x01
الردود
0
المشاهدات
241
x32x01
x32x01
الوسوم : الوسوم
clean code dependency injection interface segregation principle liskov substitution principle oop open closed principle single responsibility principle solid البرمجة كائنات سى شارب
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟

آخر المشاركات

إحصائيات المنتدى
المواضيع
2,388
المشاركات
2,601
أعضاء أكتب كود
574
أخر عضو
الياس
عودة
أعلى