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

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

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

ابدأ الدورة

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

\n\n

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

\n\n

في هذه المقالة، سنناقش بالضبط ما يجب الانتباه إليه عند مراجعة كود C#، وكيفية تقديم الملاحظات بطريقة تجعلك مسموعًا، وليس مكروهًا.

\n\n

1. البنية والمنطق: "لماذا نفعل هذا؟"

\n\n

قبل النظر إلى التنسيق وأسماء المتغيرات، تأكد من أن المشكلة التي يتم حلها منطقية على الإطلاق. هذه هي المرحلة الأكثر أهمية، ولكن غالبًا ما يتم تخطيها.

\n\n
    \n
  • الامتثال للمتطلبات: هل يحل الكود مشكلة العمل المحددة الموصوفة في التذكرة؟ هل هناك وظائف غير ضرورية (YAGNI)؟
  • \n
  • انتهاك مبادئ SOLID: هل تحولت الفئة إلى "كائن إلهي"؟ هل هناك فصل واضح للمسؤوليات؟ على سبيل المثال، هل يتم خلط منطق الأعمال مع منطق الوصول إلى البيانات؟
  • \n
  • التعقيد المفرط: هل يمكن حل المشكلة بشكل أبسط؟ أحيانًا يكتب المطورون أنماطًا معقدة حيث تكفي جملة if-else عادية أو حلقة بسيطة.
  • \n
\n\n
// ❌ سيء: الفئة تقوم بالكثير جدًا\npublic class UserService\n{\n    public void RegisterUser(string email, string password)\n    {\n        // التحقق\n        if (!email.Contains("@"))\n            throw new Exception("Invalid email");\n\n        // تجزئة كلمة المرور\n        var hash = BCrypt.HashPassword(password);\n\n        // الحفظ في قاعدة البيانات\n        using var db = new AppDbContext();\n        db.Users.Add(new User { Email = email, PasswordHash = hash });\n        db.SaveChanges();\n\n        // إرسال البريد الإلكتروني\n        SmtpClient.Send("welcome@site.com", email, "Welcome!");\n    }\n}\n\n// ✅ جيد: الفصل إلى طبقات (SRP)\npublic class UserRegistrationService\n{\n    private readonly IUserRepository _repository;\n    private readonly IEmailService _emailService;\n\n    public UserRegistrationService(IUserRepository repository, IEmailService emailService)\n    {\n        _repository = repository;\n        _emailService = emailService;\n    }\n\n    public async Task<Result> RegisterAsync(string email, string password)\n    {\n        if (!EmailValidator.IsValid(email))\n            return Result.Failure("Invalid email");\n\n        var user = User.Create(email, password);\n        await _repository.AddAsync(user);\n        await _emailService.SendWelcomeAsync(email);\n\n        return Result.Success();\n    }\n}
\n\n

2. الأداء والأمان: "هل سيقتل هذا الخادم؟"

\n\n

.NET إطار عمل قوي، ولكن من السهل استخدامه بشكل غير صحيح. إليك ما يجب التحقق منه في كل مراجعة.

\n\n
    \n
  • عدم التزامن (async/await): هل هناك استدعاءات حظر (.Result، .Wait()) في الكود غير المتزامن؟ هذا يقتل الأداء. استخدم ConfigureAwait(false) في المكتبات.
  • \n
  • تسرب الذاكرة: هل تم تحرير موارد IDisposable؟ هل يتم استخدام using لـ Stream، SqlConnection، إلخ؟
  • \n
  • حقن SQL: هل يتم بناء الاستعلامات عبر تسلسل السلاسل النصية؟ في C# الحديث مع Entity Framework أو Dapper، هذا نادر، لكن التحقق إلزامي.
  • \n
  • LINQ والمجموعات: هل هناك مرور متعدد على نفس المجموعة؟ هل يتم استخدام Any() بدلاً من Count() > 0 للتحقق من وجود عناصر؟
  • \n
\n\n
// ❌ سيء: استدعاء حظر ومرور متعدد\nvar task = GetDataAsync();\nvar data = task.Result; // حظر الخيط!\n\nif (data.Count() > 0) // مرور أول                

المدونات

توصيات الكتب