إعادة هيكلة الكود القديم بلغة C#: من الألف إلى الياء

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

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

ابدأ الدورة

مقدمة: لماذا يحتاج الكود القديم إلى إعادة هيكلة؟

\n\n

كل مطور يعمل على منصة .NET، عاجلاً أم آجلاً، يواجه كوداً قديماً. هذه برامج مكتوبة بإصدارات قديمة من C# (مثل .NET Framework 4.x)، تستخدم أنماطاً قديمة مثل DataTable في ASP.NET Web Forms أو فئات ضخمة بآلاف الأسطر. هذا الكود هو مصدر للديون التقنية: فهو صعب الصيانة، ويحتوي على أخطاء مخفية، ويبطئ تطبيق الميزات الجديدة.

\n\n

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

\n\n

1. التشخيص والتحضير: من أين نبدأ؟

\n\n

قبل تغيير الكود، يجب فهم حالته الحالية. بدون تحليل، أنت تخاطر بتعطيل الوظائف.

\n\n

1.1. تقييم الديون التقنية

\n

استخدم محللي الكود المدمجين في Visual Studio أو المتاحة عبر NuGet:

\n
    \n
  • Roslyn analyzers — تكتشف الأخطاء المحتملة والتراكيب القديمة.
  • \n
  • SonarQube (أو SonarCloud) — تقيم جودة الكود، والتكرار، والتعقيد.
  • \n
  • NDepend — تصور التبعيات بين الفئات والوحدات.
  • \n
\n\n

1.2. كتابة الاختبارات كشبكة حماية

\n

إعادة الهيكلة بدون اختبارات هي لعبة روليت روسية. غالباً لا توجد اختبارات وحدة للكود القديم. ابدأ بكتابة اختبارات توصيفية (characterization tests) تثبت السلوك الحالي:

\n\n
// مثال لاختبار لطريقة قديمة\n[Test]\npublic void CalculateDiscount_ShouldReturn10Percent_WhenOrderTotalIsGreaterThan100()\n{\n    // Arrange\n    var legacyClass = new OrderProcessor();\n    var order = new Order { Total = 150 };\n    \n    // Act\n    var result = legacyClass.CalculateDiscount(order);\n    \n    // Assert\n    Assert.AreEqual(15, result); // 10% من 150\n}
\n\n

أنشئ اختبارات للمسارات الحرجة. هذا سيسمح لك بإعادة الهيكلة بأمان، مع العلم أن السلوك لن يتغير.

\n\n

1.3. اختيار الاستراتيجية: "استراتيجية الحديقة"

\n

لا تحاول إعادة هيكلة المشروع بأكمله مرة واحدة. اختر وحدة أو فئة واحدة تسبب أكبر قدر من المشاكل (تعقيد عالٍ، أخطاء متكررة). اعمل بشكل تكراري: خطوات صغيرة، وتحديثات متكررة.

\n\n

2. التقنيات الأساسية لإعادة هيكلة الكود القديم بلغة C#

\n\n

دعنا نستعرض الأساليب الرئيسية التي ستساعد في تحويل "كود السباغيتي" إلى بنية نظيفة.

\n\n

2.1. التخلص من الكائنات العملاقة (الفئات الكبيرة)

\n

غالباً ما يحتوي الكود القديم على فئات تفعل كل شيء: تعمل مع قاعدة البيانات، وتتحقق من صحة البيانات، وترسل البريد الإلكتروني. استخدم مبدأ المسؤولية الواحدة (SRP).

\n\n

قبل إعادة الهيكلة:

\n
public class UserService\n{\n    public void RegisterUser(string name, string email)\n    {\n        // التحقق من الصحة\n        if (string.IsNullOrEmpty(name)) throw new Exception();\n        \n        // العمل مع قاعدة البيانات\n        using (var conn = new SqlConnection("..."))\n        {\n            conn.Execute("INSERT INTO Users ...");\n        }\n        \n        // إرسال البريد الإلكتروني\n        SmtpClient client = new SmtpClient();\n        client.Send(new MailMessage(...));\n    }\n}
\n\n

بعد إعادة الهيكلة:

\n
public class UserService\n{\n    private readonly IUserRepository _userRepository;\n    private readonly IEmailService _emailService;\n    private readonly IValidator<UserRegistration> _validator;\n\n    public UserService(IUserRepository repo, IEmailService email, IValidator<UserRegistration> validator)\n    {\n        _userRepository = repo;\n        _emailService = email;\n        _validator = validator;\n    }\n\n    public void RegisterUse                

المدونات

توصيات الكتب