Рефакторинг 030 - как избежать случайной избыточности

Рефакторинг 030 - как избежать случайной избыточности

15 июля 2025 г.

Избегайте случайной избыточности

TL; DR: не проходите атрибуты вашего объекта уже владеет

Проблемы решаются 😔

  • Избыточные параметры
  • Неясная ответственность
  • Дублированная логика
  • Параметрзагрязнение
  • Низкая сплоченность
  • Избыточность параметра
  • Кодовое дублирование
  • НеполныйИзвлеченный объект метода

https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-xxxviii

https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-xxxv

https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-ii-o96s3wl4

https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-x-i7r34uj

https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-xxix

Шаги 👣

  1. Определите методы, которые получают атрибуты, которые получают
  2. Удалить эти параметры из подписи метода
  3. Замените использование прямым доступом к атрибуту
  4. Переименовать метод, если это необходимо, чтобы соответствовать новому намерению

Пример кода 💻

До 🚨

class Auto {
  constructor(motor) {
    this.motor = motor
  }

  startEngine(motor) {
    motor.ignite()
  }
}

// Usage
const motor = new Motor()
const auto = new Auto(motor)

auto.startEngine(motor)
// Redundant and maybe inconsistent

После 👉

class Auto {
  constructor(motor) {
    this.motor = motor
  }
    
  // 1. Identify methods that receive owned attributes    
  startEngine() {
    // 2. Remove those parameters from the method signature  
    // 4. Rename the method if needed to match the new intention
    this.motor.ignite()
  }
}

// Adjust usage to call without passing motor
const motor = new Motor()
const auto = new Auto(motor)

// 3. Replace usage with direct access to the attribute  
auto.startEngine() // No parameter needed

Тип 📝

  • [x]Автоматический

Безопасность 🛡

Этот рефакторинг прост и безопасен, если у вас есть хороший тестовый охват.

Почему код лучше? ✨

Вы удаляетеСлучайная сложностьПолем

Вы перестаете притворяться, что ваш метод нуждается в информации снаружи.

Вы уменьшаете когнитивную нагрузку и улучшаете инкапсуляцию.

Вы уточняете, какие атрибутысущественныйПолем

Вы избегаете передачи одних и тех же данных по разным путям.

Вы уменьшаете избыточность параметров и упрощаете подписи метода.

Вы устраняете возможность передачи непоследовательных значений, поскольку методы теперь напрямую получают доступ к состоянию объекта.

Это делает код более поддерживаемым и уменьшает когнитивную нагрузку при чтении методов вызовов.

Методы становятся более сплоченными, полагаясь на данные их собственного объекта, а не на внешние параметры.

Как это улучшает биение? 🗺

Этот рефакторинг усиливаетБиениевыравнивая объектное поведение более тесно с реальными сущностями.

Вы соответствуете концепции реального мира: объект использует то, что он владеет.

Вы улучшаете антропоморфизм и избегаете нереалистичной косвенности.

Вы также уменьшаете внутреннюю и внешнююсцеплениеПолем

Ограничения ⚠

Это работает только в том случае, если метод всегда использует внутренний атрибут.

Если вам нужно вводить разные версии для тестирования или вариаций, рассмотрите возможность использованияИнъекция зависимостиили стратегический шаблон.

Рефактор с ИИ 🤖

Предлагаемая подсказка: 1. Определите методы, которые получают атрибуты, принадлежащие 2. Удалите эти параметры из подписи метода 3. Замените использование на прямой доступ к атрибуту 4. Переименовать метод, если это необходимо, чтобы соответствовать новому намерению

Без надлежащих инструкций

С конкретными инструкциями

Чатгпт

Чатгпт

Клод

Клод

Недоумение

Недоумение

Второй пилот

Второй пилот

Ты

Ты

Близнецы

Близнецы

DeepSeek

DeepSeek

Meta ai

Meta ai

Грок

Грок

Qwen

Qwen

Теги 🏷

  • Инкапсуляция

Уровень 🔋

  • [x]Новичок

https://maximilianocontieri.com/refactoring-010-extract-method-object?embedable=true

https://hackernoon.com/refactoring-016-building-with-the-essence?embedable=true

https://maximilianocontieri.com/refactoring-020-transform-static-functs?embedable=true

https://hackernoon.com/refactoring-024-replace-global-variables-with-preadency-incement?embedable=true

  • Удалить параметр
  • Ввести объект параметров

Кредиты 🙏

Изображение поФ. МухаммеднаPixabay


Эта статья является частью серии Refactoring.

https://maximilianocontieri.com/how-to-improve-your-code-with-easy-refactorings?embedable=true


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE