- بواسطة x32x01 ||
لو عمرك شوفت مصطلح SOLID Principles وفضلت تقول:
"هو الموضوع ده مهم ليه؟ وليه كل الناس بتتكلم عنه؟"
يبقى البوست ده مكتوب مخصوص ليك
المبادئ دي هتغيّر طريقة تفكيرك في كتابة الكود حرفيًا.
هتساعدك تكتب code:
الكلمة SOLID هي اختصار لـ 5 مبادئ في الـ OOP:
نفس الكلام في الكود:
لو عندك كلاس بيعمل كذا حاجة → لما تيجي تعدل فيه هتكسر حاجة تانية.
استخدم interface:
لأن المربع لازم عرضه = ارتفاعه، بينما المستطيل لا.
الحل؟
يُفضّل يعملوا implement لـ IShape بدل الوراثة.
قسمها:
الاثنين لازم يعتمدوا على Interfaces.
ده اسمه Dependency Injection.
خلاصة الكلام
لو فهمت SOLID:
"هو الموضوع ده مهم ليه؟ وليه كل الناس بتتكلم عنه؟"
يبقى البوست ده مكتوب مخصوص ليك
المبادئ دي هتغيّر طريقة تفكيرك في كتابة الكود حرفيًا.
هتساعدك تكتب 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; }
} خلاصة الكلام
لو فهمت SOLID:- الكود هيبقى نظيف
- سهل يتوسع
- قليل المشاكل
- ومحدش هيكره يشتغل بعدك
