مراجعة كود C#: 7 أشياء تثير حنق المطورين الخبراء

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

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

ابدأ الدورة

مقدمة: لماذا يثير كودك حنق الخبير؟

\n\n

لقد أرسلت طلب السحب. مرت خمس دقائق. تصل رسالة في الدردشة: "هل نعيد كتابة هذه الكتلة؟" وعشرات التعليقات تحت كل سطر ثانٍ. هل هذا مألوف؟ إذا كنت تكتب بلغة C# وتعمل ضمن فريق، فإن مراجعة الكود ليست مجرد علامة في Jira. إنها لحظة الحقيقة.

\n\n

لقد جمعت الملاحظات النموذجية التي يتركها الخبراء في مراجعة كود C#. الأمر لا يتعلق بالصياغة - بل بالتفكير. يتعلق بكيفية تحويل "الكود الذي يعمل فقط" إلى كود لا ترغب في إعادة كتابته في أول جمعة.

\n\n

لنبدأ في تحليل الأنماط المضادة في C# التي تثير حنق حتى أكثر قادة الفرق هدوءًا.

\n\n

1. الأرقام والنصوص السحرية: "ماذا يعني هذا؟"

\n\n

التعليق الأكثر شيوعًا في مراجعة كود C# هو سؤال عن الأرقام. تكتب if (status == 3)، ويسأل الخبير فورًا: "ما هذا الرقم 3؟ هل هي حالة "قيد المعالجة" أم "محذوف"؟".

\n\n

سيء:

\n
if (order.Status == 3 && days > 7)\n{\n    CancelOrder(order);\n}\n
\n\n

جيد:

\n
private const int OrderStatusCancelled = 3;\nprivate const int MaxDaysBeforeAutoCancel = 7;\n\nif (order.Status == OrderStatusCancelled && days > MaxDaysBeforeAutoCancel)\n{\n    CancelOrder(order);\n}\n
\n\n

والأفضل من ذلك هو استخدام enum. الخبراء يعشقون الكود القابل للقراءة حيث لا تحتاج للرجوع إلى قاعدة البيانات لفهم منطق الأعمال. هذه قاعدة أساسية في مراجعة كود C#: يجب أن يتحدث الكود عن نفسه.

\n\n

2. Async void - القاتل الصامت للتطبيقات

\n\n

إذا كنت تكتب async void في أي مكان غير معالجات الأحداث (مثل WPF أو WinForms)، فاستعد لخصم كبير. لا يمكن تتبع Async void - فالاستثناء سيسقط في الفراغ ويوقف العملية.

\n\n

سيء:

\n
public async void LoadData()\n{\n    var data = await _repository.GetDataAsync();\n    // إذا حدث خطأ هنا - سيسقط التطبيق دون رسالة خطأ\n}\n
\n\n

جيد:

\n
public async Task LoadDataAsync()\n{\n    var data = await _repository.GetDataAsync();\n}\n
\n\n

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

\n\n

3. فئات جودزيلا: مبدأ المسؤولية الواحدة

\n\n

تفتح ملفًا وتجد 2000 سطر. فئة واحدة تفعل كل شيء: تصل إلى قاعدة البيانات، ترسل البريد الإلكتروني، تنشئ التقارير، وحتى تحضر القهوة. هذا هو النمط المضاد الكلاسيكي في C# - الكائن العملاق.

\n\n

سيقول الخبير في مراجعة كود C#: "لنقسمها إلى عدة فئات". وسيكون على حق.

\n\n

مثال على المخالفة:

\n
public class OrderService\n{\n    public void ProcessOrder(Order order)\n    {\n        // 1. التحقق\n        // 2. الحفظ في قاعدة البيانات\n        // 3. إرسال البريد الإلكتروني\n        // 4. التسجيل\n    }\n}\n
\n\n

كيف يجب أن يكون:

\n
public class OrderProcessor\n{\n    private readonly IOrderValidator _validator;\n    private readonly IOrderRepository _repository;\n    private readonly INotificationService _notificationService;\n\n    public OrderProcessor(\n        IOrderValidator validator,\n        IOrderRepository repository,\n        INotificationService notificationService)\n    {\n        _validator = validator;\n        _repository = repository;\n        _notificationService = notificationService;\n    }\n\n    public async Task ProcessOrderAsync(Order order)\n    {\n        _validator.Validate(order);\n        await _repository.SaveAsync(order);\n        await _notificationService.SendConfirmationAsync(order);\n    }\n}\n
\n\n

هذا ليس مجرد "جميل". إنه قابل للاختبار. يمكنك محاكاة المستودع والتحقق فقط من منطق المعالجة. إعادة هيكلة C# بهذا الأسلوب أمر لا بد منه لأي مشروع.

\n\n

4. الاستثناءات كهياكل تحكم

\n\n

المدونات

توصيات الكتب