
Рефакторинг 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
Шаги 👣
- Определите методы, которые получают атрибуты, которые получают
- Удалить эти параметры из подписи метода
- Замените использование прямым доступом к атрибуту
- Переименовать метод, если это необходимо, чтобы соответствовать новому намерению
Пример кода 💻
До 🚨
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
Оригинал