أخصائي المجال

مستشار إعادة الهيكلة

أخصائي الديون التقنية وروائح الكود

وكيل ذكاء اصطناعي متخصص يركز على تحديد روائح الكود والديون التقنية ومشاكل قابلية الصيانة التي ستسبب مشاكل مع نمو قاعدة الكود الخاصة بك. يجد المشاكل الهيكلية قبل أن تتراكم.

ما يكتشفه مستشار إعادة الهيكلة

المشاكل الهيكلية التي تجعل الكود صعب الصيانة والتوسيع والفهم

روائح الكود

مشاكل هيكلية تشير إلى مشاكل أعمق في تصميم قاعدة الكود الخاصة بك

الدوال الطويلة (>50 سطر)الفئات الكبيرة (>500 سطر)التداخل العميق (>4 مستويات)قوائم المعاملات الطويلة (>5)

مشاكل التصميم

مشاكل تصميم البرمجة الكائنية التي تجعل الكود صعب التغيير والاختبار

الكائنات الإلهيةحسد الميزاتالعلاقة غير اللائقةهوس البدائيات

انتهاكات SOLID

انتهاكات مبادئ التصميم الأساسية التي تؤدي إلى كود جامد وهش

المسؤولية الواحدةالمفتوح/المغلقاستبدال ليسكوفعكس التبعية

التعقيد العالي

مسارات الكود المعقدة جداً للفهم أو الاختبار أو الصيانة بأمان

التعقيد الدوري >10الشروط المعقدةتدفق التحكم صعب المتابعة

عتبات روائح الكود

حدود موضوعية تشير إلى متى يحتاج الكود إلى إعادة هيكلة

طول الدالة

> 50 سطر

يجب أن تتسع الدوال في شاشة واحدة

حجم الفئة

> 500 سطر

يجب أن تكون للفئات مسؤولية واحدة

عدد المعاملات

> 5 معاملات

فكر في استخدام كائن خيارات

عمق التداخل

> 4 مستويات

استخرج دوالاً أو استخدم العودة المبكرة

التعقيد الدوري

> 10

مسارات كثيرة جداً للاختبار بشكل موثوق

الكتل المكررة

> 6 أسطر

استخرجها إلى دالة مشتركة

أنماط إعادة الهيكلة في العمل

شاهد كيف يحدد مستشار إعادة الهيكلة المشاكل ويقترح أنماطاً محددة لتطبيقها

نمط استخراج الدالة

قبل
function processOrder(order) {
  // Validate order
  if (!order.items || order.items.length === 0) {
    throw new Error('Empty order')
  }
  if (!order.customer) {
    throw new Error('No customer')
  }

  // Calculate totals
  let subtotal = 0
  for (const item of order.items) {
    subtotal += item.price * item.quantity
  }
  const tax = subtotal * 0.1
  const total = subtotal + tax

  // Apply discounts
  let discount = 0
  if (order.customer.isPremium) {
    discount = total * 0.15
  } else if (subtotal > 100) {
    discount = total * 0.05
  }

  return total - discount
}

الدالة تقوم بـ 4 أشياء: التحقق، الحساب، الضريبة، الخصومات

بعد
function processOrder(order) {
  validateOrder(order)
  const subtotal = calculateSubtotal(order.items)
  const total = applyTax(subtotal)
  return applyDiscount(total, order.customer)
}

function validateOrder(order) {
  if (!order.items?.length) throw new Error('Empty order')
  if (!order.customer) throw new Error('No customer')
}

function calculateSubtotal(items) {
  return items.reduce((sum, item) =>
    sum + item.price * item.quantity, 0)
}

استخراج الدالة: كل دالة تقوم بشيء واحد بشكل جيد

استبدال الشرطية بتعدد الأشكال

قبل
function calculateShipping(order) {
  switch (order.shippingType) {
    case 'express':
      return order.weight * 5.0 + 15
    case 'standard':
      return order.weight * 2.5 + 5
    case 'economy':
      return order.weight * 1.0
    case 'freight':
      return order.weight * 0.5 + 50
    default:
      throw new Error('Unknown type')
  }
}

عبارة switch تنمو مع كل نوع شحن جديد

بعد
interface ShippingStrategy {
  calculate(weight: number): number
}

const shippingStrategies: Record<string, ShippingStrategy> = {
  express: { calculate: w => w * 5.0 + 15 },
  standard: { calculate: w => w * 2.5 + 5 },
  economy: { calculate: w => w * 1.0 },
  freight: { calculate: w => w * 0.5 + 50 },
}

function calculateShipping(order) {
  const strategy = shippingStrategies[order.shippingType]
  if (!strategy) throw new Error('Unknown type')
  return strategy.calculate(order.weight)
}

نمط الاستراتيجية: إضافة أنواع جديدة دون تعديل الكود الموجود

إزالة حسد الميزات

قبل
class OrderProcessor {
  calculateTax(order) {
    const subtotal = order.items.reduce((sum, item) =>
      sum + item.price * item.quantity, 0)
    const taxRate = order.customer.region === 'EU'
      ? order.customer.country.vatRate
      : 0.0
    return subtotal * taxRate
  }
}

OrderProcessor يعرف الكثير عن التفاصيل الداخلية لـ Order و Customer

بعد
class Order {
  calculateSubtotal() {
    return this.items.reduce((sum, item) =>
      sum + item.price * item.quantity, 0)
  }

  calculateTax() {
    return this.calculateSubtotal() * this.customer.getTaxRate()
  }
}

class Customer {
  getTaxRate() {
    return this.region === 'EU' ? this.country.vatRate : 0.0
  }
}

نقل السلوك إلى الفئة التي تملك البيانات

تحليل عميق

كيف يعمل مستشار إعادة الهيكلة

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

التعرف على الأنماط

يحدد روائح الكود والأنماط المضادة في بنية الكود الخاص بك

وصفات إعادة الهيكلة

يقترح أنماطاً محددة: استخراج الدالة، استبدال الشرطية، نقل الدالة

مبادئ SOLID

يتحقق من الالتزام بـ SRP و OCP و LSP و ISP و DIP

خط أنابيب التحليل

1

قياس المقاييس

يحسب طول الدالة/الفئة ودرجات التعقيد

2

تحديد الأنماط

يكتشف روائح الكود وأنماط التصميم المضادة

3

التحقق من SOLID

يتحقق من الالتزام بمبادئ التصميم

4

اقتراح إعادة الهيكلة

يوصي بأنماط محددة مثل استخراج الدالة، استبدال الشرطية بتعدد الأشكال

النتائج حسب الأولوية

يركز على المشاكل التي ستسبب مشاكل صيانة، وليس ملاحظات الأسلوب

الأعلى

المنطق المكرر

كود منسوخ يجب تغييره في أماكن متعددة

عالي

الكائنات الإلهية

فئات تفعل أشياء كثيرة جداً، مستحيلة الاختبار

متوسط

التعقيد العالي

دوال بها مسارات كثيرة جداً للاختبار بشكل موثوق

أقل

مشاكل الأسلوب

يتم تخطيها لصالح المشاكل الهيكلية

الديون التقنية تتراكم بشكل أسي.
مستشار إعادة الهيكلة يكتشفها مبكراً.

أوقف الديون التقنية
قبل أن تبدأ

دع مستشار إعادة الهيكلة يكتشف المشاكل الهيكلية قبل أن تتراكم. مجاني لمدة 14 يوماً، لا حاجة لبطاقة ائتمان.

كشف روائح الكود
انتهاكات SOLID
أنماط إعادة الهيكلة