Clean Code في C#: المبادئ والأمثلة لمطور .NET

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

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

ابدأ الدورة

Clean Code في C#: كيفية كتابة كود يُقرأ بشغف



كل مطور .NET واجه موقفًا يصبح فيه الكود الخاص به غير قابل للقراءة بعد شهر أو شهرين. لتجنب ذلك، توجد فلسفة Clean Code التي نشرها روبرت مارتن. في هذه المقالة، سنشرح المبادئ الأساسية للكود النظيف في C# مع أمثلة محددة ستساعدك على كتابة تطبيقات قابلة للصيانة والتوسع.



لماذا يعتبر Clean Code مهمًا لمطور C#؟



الكود النظيف ليس مجرد تنسيق جميل. إنه مجموعة من الممارسات التي تجعل الكود:

  • قابلًا للقراءة — أي مطور سيفهم المنطق بسرعة؛
  • قابلًا للصيانة — من السهل إجراء التغييرات دون خطر تعطيل النظام؛
  • قابلًا للاختبار — يمكن تغطية الكود بسهولة باختبارات الوحدة؛
  • فعالًا — عدم وجود تجريدات زائدة أو تكرار.


في C# مع كتابته القوية وإمكانيات .NET القوية (LINQ, async/await, Records)، فإن اتباع مبادئ Clean Code مهم بشكل خاص. الكود السيئ في C# يمكن أن يؤدي إلى أخطاء غير واضحة ومشاكل في الأداء.



المبدأ 1: تسمية المتغيرات والدوال



يجب أن يجيب اسم المتغير أو الدالة على السؤال "ما هذا؟" أو "ماذا يفعل؟". تجنب الاختصارات المكونة من حرف واحد (باستثناء مؤشرات الحلقات).



مثال سيء

public class Data{    public int a; // ما هذا؟    public string b; // غير واضح

public void Do(int x, int y) // ماذا تفعل الدالة؟ { var r = x + y; Console.WriteLine(r); }}


مثال جيد (Clean Code)

public class Customer{    public int Id { get; set; }    public string FullName { get; set; }

public void PrintCustomerSummary(int customerId, int orderCount) { var totalOrders = customerId + orderCount; Console.WriteLine($"Customer {customerId} has {totalOrders} orders"); }}


القاعدة: يجب أن تكون الأسماء معبرة. إذا كان المتغير يسمى data، فهذا دائمًا تقريبًا سيء. استخدم customerData، orderList، invoiceTotal.



المبدأ 2: دوال صغيرة بمسؤولية واحدة



يجب أن تقوم كل دالة بشيء واحد بالضبط. إذا كانت الدالة تحتوي على أكثر من 10-15 سطرًا، فمن المحتمل أنها تحتاج إلى التقسيم. هذا هو أساس مبدأ Single Responsibility (من SOLID).



مثال سيء (الدالة تفعل كل شيء)

public void ProcessOrder(int orderId){    // 1. التحقق    if (orderId <= 0) throw new ArgumentException("Invalid ID");        // 2. الحصول على البيانات من قاعدة البيانات    var order = _db.Orders.Find(orderId);        // 3. حساب الخصم    decimal discount = 0;    if (order.Total > 1000) discount = order.Total * 0.1m;        // 4. إرسال البريد الإلكتروني    var email = new MailMessage();    email.To.Add(order.CustomerEmail);    email.Subject = "Order processed";        // 5. التسجيل    _logger.LogInformation("Order {Id} processed", orderId);}


مثال جيد (إعادة الهيكلة)

public void ProcessOrder(int orderId){    ValidateOrderId(orderId);    var order = GetOrderFromDatabase(orderId);    var discount = CalculateDiscount(order);    SendConfirmationEmail(order, discount);    LogOrderProcessing(orderId);}

private void ValidateOrderId(int orderId){ if (orderId <= 0) throw new ArgumentException("Order ID must be positive", nameof(orderId));}

private Order GetOrderFromDatabase(int orderId){ return _db.Orders.Find(orderId) ?? throw new InvalidOperationException("Order not found");}

private decimal CalculateDiscount(Order order){ return order.Total > 1000 ? order.Total * 0.1m : 0;}

private void SendConfir

المدونات

توصيات الكتب