مبادئ SOLID في لغة C#: النظرية والتطبيق مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مبادئ SOLID في لغة C#: النظرية والتطبيق



SOLID هو اختصار لخمسة مبادئ أساسية في البرمجة كائنية التوجه وتصميم البرمجيات، صاغها روبرت مارتن (العم بوب). تساعد هذه المبادئ المطورين على إنشاء كود مرن وقابل للصيانة والتوسع. في هذه المقالة، سنشرح كل مبدأ من مبادئ SOLID بلغة C# مع أمثلة كود محددة.



1. Single Responsibility Principle (SRP) — مبدأ المسؤولية الواحدة



النظرية: يجب أن يكون لكل class سبب واحد فقط للتغيير. بمعنى آخر، يجب أن يكون class مسؤولاً عن مهمة واحدة محددة بوضوح.



التطبيق في C#: لننظر إلى مثال لانتهاك SRP وكيفية إصلاحه.



انتهاك SRP:

public class OrderService{    public void CreateOrder(Order order)    {        // منطق إنشاء الطلب        Console.WriteLine("تم إنشاء الطلب");                // منطق إرسال البريد الإلكتروني        SendEmail("order@example.com", "طلب جديد");                // منطق التسجيل        File.WriteAllText("log.txt", "تم إنشاء الطلب");    }}


class OrderService مسؤول عن ثلاث مهام مختلفة: إنشاء الطلب، إرسال البريد الإلكتروني، والتسجيل. هذا ينتهك مبدأ SRP.



الإصلاح مع الالتزام بـ SRP:

public class OrderService{    private readonly IEmailService _emailService;    private readonly ILogger _logger;        public OrderService(IEmailService emailService, ILogger logger)    {        _emailService = emailService;        _logger = logger;    }        public void CreateOrder(Order order)    {        // منطق إنشاء الطلب        Console.WriteLine("تم إنشاء الطلب");                _emailService.SendEmail("order@example.com", "طلب جديد");        _logger.Log("تم إنشاء الطلب");    }}

public interface IEmailService{ void SendEmail(string to, string message);}

public class EmailService : IEmailService{ public void SendEmail(string to, string message) { Console.WriteLine($"تم إرسال البريد الإلكتروني إلى {to}"); }}

public interface ILogger{ void Log(string message);}

public class FileLogger : ILogger{ public void Log(string message) { File.WriteAllText("log.txt", message); }}


الآن كل class مسؤول فقط عن مهمته: OrderService مسؤول عن إدارة الطلب، EmailService مسؤول عن إرسال البريد الإلكتروني، FileLogger مسؤول عن التسجيل.



2. Open-Closed Principle (OCP) — مبدأ الانفتاح/الإغلاق



النظرية: يجب أن تكون الكيانات البرمجية (classes، modules، functions) مفتوحة للتمديد ولكن مغلقة للتعديل.



التطبيق في C#: نستخدم الوراثة والواجهات لتوسيع الوظائف دون تغيير الكود الموجود.



انتهاك OCP:

public class PaymentProcessor{    public void ProcessPayment(string paymentType, decimal amount)    {        if (paymentType == "CreditCard")        {            // معالجة بطاقة الائتمان        }        else if (paymentType == "PayPal")        {            // معالجة PayPal        }        // إضافة نوع جديد يتطلب تغيير class    }}


الإصلاح مع الالتزام بـ OCP:

public interface IPaymentMethod{    void Process(decimal amount);}

public class CreditCardPayment : IPaymentMethod{ public void Process(decimal amount) { Console.WriteLine($"معالجة بطاقة الائتمان: {amount}"); }}

public class PayPalPayment : IPaymentMethod{ public void Process(decimal amount) { Console.WriteLine($"معالجة PayPal: {amount}"); }}

public class PaymentProcessor{ public void ProcessPayment(IPaymentMethod paymentMethod, decimal amount) { paymen

المدونات

توصيات الكتب