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

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

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

ابدأ الدورة

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



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



1. التشخيص والتحضير: قبل لمس الكود



الخطوة الأولى والأكثر أهمية هي فهم ما تتعامل معه. لا تبدأ إعادة الهيكلة بتعديل عشوائي للأسطر. بدلاً من ذلك:



  • خريطة التبعيات: قم بتصور الفئات التي تعتمد على أي منها. استخدم أدوات مثل IntelliJ IDEA Dependency Viewer أو JDepend.
  • غلاف الاختبار (Characterization Tests): اكتب اختبارات تثبت السلوك الحالي للكود. هذه هي شبكة الأمان الخاصة بك.
  • حدد نقاط الدخول: حدد الطرق التي يتم استدعاؤها بشكل متكرر وأين تحدث التغييرات الرئيسية.


مثال على اختبار characterization بسيط لطريقة تحتاج إلى إعادة هيكلة:



import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.assertEquals;

public class LegacyCalculatorTest {

@Test public void testLegacyCalculate() { LegacyCalculator calc = new LegacyCalculator(); // نثبت السلوك الحالي int result = calc.calculate(10, 5, "add"); assertEquals(15, result, "السلوك الحالي: الجمع"); result = calc.calculate(10, 5, "sub"); assertEquals(5, result, "السلوك الحالي: الطرح"); }}


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



2. استراتيجية إعادة الهيكلة "الجراحية": طريقة تلو الأخرى



محاولة إعادة هيكلة الفصل بأكمله مرة واحدة هي طريقة مؤكدة للحصول على أخطاء. استخدم نهج "التنقيب القتالي" (Combat Archaeology):



  • اختر طريقة واحدة أو مجموعة صغيرة من الطرق المرتبطة.
  • اكتب اختبارات characterization لها (إذا لم تكن موجودة).
  • طبق تقنية واحدة لإعادة الهيكلة (مثل Extract Method أو Rename Variable).
  • شغل الاختبارات. يجب أن تنجح.
  • قم بعمل commit للتغييرات مع وصف واضح.


مثال: إعادة هيكلة طريقة تحتوي على "أرقام سحرية" وقائمة طويلة من المعاملات.



الكود الأصلي (سيء):



public class OrderProcessor {    public double process(double amount, int type, double discount) {        double result;        if (type == 1) {            result = amount * 1.2; // هامش ربح 20%            if (discount > 0.1) {                result = result - result * 0.05; // خصم 5%            }        } else if (type == 2) {            result = amount * 1.5; // هامش ربح 50%        } else {            result = amount;        }        return result;    }}


بعد إعادة الهيكلة (محسّن):



public class OrderProcessor {    private static final double PREMIUM_MARKUP = 1.2;    private static final double STANDARD_MARKUP = 1.5;    private static final double LOYALTY_DISCOUNT = 0.05;    private static final double DISCOUNT_THRESHOLD = 0.1;

public double process(OrderType type, double amount, double discount) { double basePrice = applyMarkup(amount, type); return applyLoyaltyDiscount(basePrice, discount); }

private double applyMarkup(double amount, OrderType type) { return switch (type) { case PREMIUM -> amount * PREMIUM_MARKUP; case STANDARD -> amount * STANDARD_MARKUP; case BASIC

المدونات

توصيات الكتب