مراجعة الكود في C#: ما الذي يجب التحقق منه وكيفية تقديم الملاحظات

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

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

ابدأ الدورة

مراجعة الكود في لغة C#: ما يجب التحقق منه وكيفية تقديم الملاحظات



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



1. البنية والامتثال لمبادئ SOLID

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

  • المسؤولية الواحدة (Single Responsibility): يجب أن يحل كل class وكل method مهمة واحدة. إذا كان method يقوم بأكثر من اللازم - فهذا سبب للمراجعة.
  • مفتوح/مغلق (Open/Closed): تحقق مما إذا كان يمكن توسيع الوظائف دون تعديل الكود الموجود (على سبيل المثال، من خلال الـ interfaces أو الـ abstract classes).
  • حقن التبعيات (Dependency Injection): في .NET Core/5+، DI هو المعيار. تأكد من تمرير التبعيات عبر الـ constructor، وليس إنشاؤها داخل الـ class.


// سيء: انتهاك لمبدأ المسؤولية الواحدة (SRP) وحقن التبعيات (DI)public class OrderService{    private readonly SqlConnection _connection = new SqlConnection("...");        public void ProcessOrder(Order order)    {        // منطق التحقق (Validation logic)        // منطق الحفظ في قاعدة البيانات (Database saving logic)        // منطق إرسال البريد الإلكتروني (Email sending logic)    }}

// جيد: فصل إلى خدمات (services) وحقن التبعيات (DI)public class OrderService{ private readonly IOrderRepository _orderRepository; private readonly IEmailService _emailService;

public OrderService(IOrderRepository orderRepository, IEmailService emailService) { _orderRepository = orderRepository; _emailService = emailService; }

public void ProcessOrder(Order order) { _orderRepository.Save(order); _emailService.SendConfirmation(order); }}


2. الأمان ومعالجة الأخطاء

الأمان هو جزء حاسم في أي تطبيق بلغة C#. انتبه إلى الجوانب التالية:

  • حقن SQL (SQL injections): استخدم الاستعلامات ذات المعلمات (parameterized queries) أو Entity Framework، وليس دمج السلاسل النصية (string concatenation).
  • الاستثناءات (Exceptions): لا تقم بابتلاع الاستثناءات باستخدام catch فارغة. قم بتسجيل الأخطاء واستخدم finally لتنظيف الموارد.
  • الأمان من القيم الفارغة (Null safety): في C# 8+ استخدم أنواع المراجع القابلة للقيمة الفارغة (nullable reference types). تحقق من وسائط الـ method لمعرفة ما إذا كانت null.


// سيء: عرضة لحقن SQLvar query = "SELECT * FROM Users WHERE Name = '" + userName + "'";

// جيد: استعلام مع معلمات (parameterized query)var command = new SqlCommand("SELECT * FROM Users WHERE Name = @name", connection);command.Parameters.AddWithValue("@name", userName);


تحقق أيضًا من أن التطبيق يعالج الاستثناءات بشكل صحيح عند حدود النظام (على سبيل المثال، في وحدات تحكم ASP.NET Core).



3. الأداء وإدارة الذاكرة

C# هي لغة بها إدارة تلقائية للذاكرة، لكن هذا لا يعني أنه يمكنك نسيان الأداء. أثناء المراجعة، انتبه إلى:

  • استعلامات LINQ: تجنب التكرارات المتعددة على المجموعات. على سبيل المثال، استخدام .ToList() بعد كل .Where() يمكن أن يبطئ الأداء بشكل كبير.
  • عدم التزامن (Asynchrony): استخدم async/await لعمليات الإدخال/الإخراج (I/O)، لكن لا تفرط في استخدام .Result أو .Wait() - فقد يتسبب ذلك في حالات توقف تام (deadlocks).
  • تجميع الكائنات (Object pool): للكائنات الثقيلة (على سبيل المثال، اتصالات قاعدة البيانات)، استخدم التجميع (pooling) بدلاً من إنشائها في كل مرة.


// سيء: تكرارات متعددةvar filtered = items.Where(x => x.IsActive).ToList();var sorted = filtered.OrderBy(x => x.Name).ToList                

المدونات

توصيات الكتب