Специалист Домена

AI Агент Refactoring Advisor

Специалист по Техническому Долгу и Code Smells

AI агент, специализирующийся на выявлении code smells, технического долга и проблем с поддерживаемостью, которые будут вызывать проблемы по мере роста вашего кода. Находит структурные проблемы, прежде чем они накопятся.

Что Обнаруживает Refactoring Advisor

Структурные проблемы, затрудняющие поддержку, расширение или понимание кода

Code Smells

Структурные проблемы, указывающие на более глубокие проблемы проектирования в вашем коде

Длинные методы (>50 строк)Большие классы (>500 строк)Глубокая вложенность (>4 уровней)Длинные списки параметров (>5)

Проблемы Проектирования

Проблемы объектно-ориентированного проектирования, затрудняющие изменение и тестирование кода

Божественные объектыЗависть от функциональностиНеправильная интимностьПримитивная одержимость

Нарушения SOLID

Нарушения фундаментальных принципов проектирования, приводящие к жесткому и хрупкому коду

Единственная ответственностьОткрытое/закрытоеПодстановка ЛисковаИнверсия зависимостей

Высокая Сложность

Слишком сложные пути кода, чтобы их можно было понять, протестировать или безопасно обслуживать

Циклическая сложность >10Сложные условные выраженияСложный поток управления

Пороги Code Smells

Объективные пределы, указывающие на необходимость рефакторинга кода

Длина Метода

> 50 строк

Методы должны помещаться на экран

Размер Класса

> 500 строк

Классы должны иметь одну ответственность

Количество Параметров

> 5 параметров

Рассмотрите объект опций

Глубина Вложенности

> 4 уровней

Извлеките функции или используйте ранние возвраты

Циклическая Сложность

> 10

Слишком много путей для надежного тестирования

Дублированные Блоки

> 6 строк

Извлечь в общую функцию

Паттерны Рефакторинга в Действии

Посмотрите, как Refactoring Advisor выявляет проблемы и предлагает конкретные паттерны

Паттерн Extract Method

До
function processOrder(order) {
  // Валидация заказа
  if (!order.items || order.items.length === 0) {
    throw new Error('Заказ пуст')
  }
  if (!order.customer) {
    throw new Error('Нет клиента')
  }

  // Вычислить итоги
  let subtotal = 0
  for (const item of order.items) {
    subtotal += item.price * item.quantity
  }
  const tax = subtotal * 0.1
  const total = subtotal + tax

  // Применить скидки
  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('Заказ пуст')
  if (!order.customer) throw new Error('Нет клиента')
}

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

Extract Method: каждая функция делает одно хорошо

Заменить Условное на Полиморфизм

До
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('Неизвестный тип')
  }
}

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('Неизвестный тип')
  return strategy.calculate(order.weight)
}

Паттерн Strategy: добавляйте новые типы без изменения существующего кода

Устранить Зависть от Функциональности

До
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
  }
}

Переместить поведение в класс, который владеет данными

Глубокий Анализ

Как Работает Refactoring Advisor

Refactoring Advisor не только измеряет метрики — он понимает паттерны проектирования и предлагает конкретные методы рефакторинга, которые улучшат структуру вашего кода.

Распознавание Паттернов

Выявляет code smells и антипаттерны в структуре вашего кода

Рецепты Рефакторинга

Предлагает конкретные паттерны: Extract Method, Replace Conditional, Move Method

Принципы SOLID

Проверяет соответствие SRP, OCP, LSP, ISP и DIP

Конвейер Анализа

1

Измерить Метрики

Вычисляет длину методов/классов и оценки сложности

2

Определить Паттерны

Обнаруживает code smells и антипаттерны проектирования

3

Проверить SOLID

Проверяет соответствие принципам проектирования

4

Предложить Рефакторинг

Рекомендует конкретные паттерны, такие как Extract Method, Replace Conditional with Polymorphism

Приоритизированные Результаты

Сосредоточивается на проблемах, которые ВЫЗОВУТ проблемы с обслуживанием, а не на стилистических деталях

САМАЯ ВЫСОКАЯ

Дублированная Логика

Код, скопированный и вставленный, который нужно менять в нескольких местах

ВЫСОКАЯ

Божественные Объекты

Классы, делающие слишком много, невозможные для тестирования

СРЕДНЯЯ

Высокая Сложность

Функции с слишком большим количеством путей для надежного тестирования

САМАЯ НИЗКАЯ

Проблемы Стиля

Игнорируются в пользу структурных проблем

Технический долг накапливается экспоненциально.
Refactoring Advisor обнаруживает его рано.

Остановите Технический Долг
Прежде, Чем Он Начнется

Позвольте Refactoring Advisor обнаружить структурные проблемы, прежде чем они накопятся. Бесплатно в течение 14 дней, без кредитной карты.

Обнаружение code smells
Нарушения SOLID
Паттерны рефакторинга