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

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

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

ابدأ الدورة

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



مراجعة الكود (Code review) ليست مجرد إجراء شكلي، بل هي أداة قوية لتحسين جودة المشروع ونمو الفريق. بالنسبة للمطورين المبتدئين في C#، غالبًا ما تسبب عملية مراجعة كود الآخرين الخوف: "ماذا لو فاتني خطأ؟"، "كيف أقول لزميلي أن كوده سيء؟". في هذه المقالة، سنناقش ما يجب الانتباه إليه أثناء مراجعة الكود في مشاريع .NET وكيفية تقديم ملاحظات بحيث يتم سماعك وليس الإساءة إليك.



لن نتحدث عن الأمور الواضحة مثل الأخطاء النحوية - فهي يكتشفها المترجم. هدفنا هو تعلم رؤية مشاكل البنية، وقابلية القراءة، والأداء، وكذلك صياغة الملاحظات بشكل صحيح.



1. البنية ومبادئ SOLID في C#



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



ما يجب التحقق منه:

  • حجم الدوال والفئات. إذا كانت الدالة أطول من 20-30 سطرًا - فمن المحتمل أنها تقوم بأكثر من اللازم. اقترح تقسيمها إلى عدة دوال خاصة.
  • عكس التبعيات (Dependency Inversion). يجب ألا تنشئ الفئات تبعياتها عبر new. بدلاً من ذلك، استخدم حقن التبعيات (DI). مثال على كود سيء:


// سيء: الفئة تنشئ التبعية بنفسهاpublic class OrderService{    private readonly EmailSender _sender = new EmailSender();

public void ProcessOrder(Order order) { // منطق... _sender.SendEmail(order.CustomerEmail); }}


الخيار الصحيح - من خلال واجهة و DI:



// جيد: يتم حقن التبعيةpublic class OrderService{    private readonly IEmailSender _sender;

public OrderService(IEmailSender sender) { _sender = sender; }

public void ProcessOrder(Order order) { // منطق... _sender.SendEmail(order.CustomerEmail); }}


  • مبدأ استبدال باربرا ليسكوف (LSP). يجب ألا تكسر الفئات المشتقة سلوك الفئة الأساسية. على سبيل المثال، إذا كان لديك فئة Bird مع دالة Fly()، وقمت بإنشاء Penguin : Bird - فهذا انتهاك لـ LSP، لأن طيور البطريق لا تطير. من الأفضل إنشاء واجهة IFlyable.


2. معالجة الأخطاء والاستثناءات في .NET



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



  • كتل catch فارغة. كود مثل catch (Exception) { } هو قنبلة موقوتة. يتم ابتلاع الخطأ ولن تعرف أبدًا بوجود مشكلة. قم دائمًا بتسجيل الاستثناء أو إعادة رميه.
  • استثناءات عامة جدًا. اصطياد Exception هو ممارسة سيئة. حاول اصطياد أنواع محددة: SqlException، InvalidOperationException، إلخ.
  • استخدام الاستثناءات للتحكم في التدفق. لا تستخدم try-catch بدلاً من if-else. مثال على كود سيء:


// سيء: استثناء كجزء من المنطقtry{    int.Parse(userInput);}catch (FormatException){    Console.WriteLine("تنسيق غير صحيح");}


الخيار الصحيح - int.TryParse():



// جيد: تحقق بدون استثناءif (int.TryParse(userInput, out int result)){    // العمل مع result}else{    Console.WriteLine("تنسيق غير صحيح");}


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



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



المشكلات النموذجية:

  • الاستخدام المفرط للذاكرة

المدونات

توصيات الكتب