🧹 Гигиена кода: Рефакторинг и Технический долг
Почему проекты умирают? Не из-за плохой идеи, а из-за того, что стоимость добавления новой фичи становится выше, чем прибыль от неё.
Разработчики тратят 90% времени на чтение и распутывание старого кода, и только 10% - на написание нового.
💳 1. Technical Debt (Технический долг)
Это метафора, придуманная Уордом Каннингемом.
🔴 Суть: Вы берете "кредит" у качества кода, чтобы выпустить фичу быстрее ("Сделаем костыль, потом поправим").
🔴 Проценты: Каждая минута, потраченная на борьбу с этим костылем в будущем.
🔴 Банкротство: Момент, когда код настолько запутан, что проще всё переписать с нуля, чем добавить кнопку.
Главное правило: Долги надо возвращать. Выделяйте 20% времени в спринте на рефакторинг.
2. Code Smells (Запахи кода)
Как понять, что код "тухнет"? По запаху.
Это не баги (код работает), это признаки плохого дизайна.
Топ-5 самых вонючих мест:
1. God Object (Божественный объект): Класс
2. Long Method (Длинный метод): Если метод не помещается на один экран монитора - это запах.
3. Magic Numbers (Магические числа):
• Плохо:
• Хорошо:
4. Duplicated Code (Дублирование): Copy-Paste это зло. Если вы нашли ошибку в одном месте, вам придется искать её копии по всему проекту. Принцип DRY (Don't Repeat Yourself).
5. Feature Envy (Зависть к чужим данным): Метод класса А постоянно обращается к полям класса Б. Скорее всего, этот метод должен жить в классе Б.
🛠 3. Refactoring (Рефакторинг)
Это процесс изменения структуры кода без изменения его поведения.
Золотое правило Бойскаута:
Зашли в файл поправить баг? Поправьте заодно название переменной или вынесите метод. Маленькие улучшения каждый день спасают проект.
💻 До и После
🤢 Было (Smelly Code):
😎 Стало (Clean Code):
Код стал читаемым, как книга.
🔥 Итог
1. Технический долг неизбежен, но его нужно гасить.
2. Запахи кода (магические числа, дубликаты) подсказывают, где рефакторить.
3. Рефакторинг делаем только при наличии Тестов (иначе вы просто ломаете рабочий код).
#Refactoring #CleanCode #TechnicalDebt #CodeSmells #Java
📲 Мы в MAX
👉@BookJava
Почему проекты умирают? Не из-за плохой идеи, а из-за того, что стоимость добавления новой фичи становится выше, чем прибыль от неё.
Разработчики тратят 90% времени на чтение и распутывание старого кода, и только 10% - на написание нового.
💳 1. Technical Debt (Технический долг)
Это метафора, придуманная Уордом Каннингемом.
Главное правило: Долги надо возвращать. Выделяйте 20% времени в спринте на рефакторинг.
2. Code Smells (Запахи кода)
Как понять, что код "тухнет"? По запаху.
Это не баги (код работает), это признаки плохого дизайна.
Топ-5 самых вонючих мест:
1. God Object (Божественный объект): Класс
Manager или Utils, который знает всё и делает всё. Нарушает SRP (Single Responsibility Principle).2. Long Method (Длинный метод): Если метод не помещается на один экран монитора - это запах.
3. Magic Numbers (Магические числа):
• Плохо:
if (status == 7) ... (Что такое 7? Счастливое число?)• Хорошо:
if (status == STATUS_ACTIVE) ...4. Duplicated Code (Дублирование): Copy-Paste это зло. Если вы нашли ошибку в одном месте, вам придется искать её копии по всему проекту. Принцип DRY (Don't Repeat Yourself).
5. Feature Envy (Зависть к чужим данным): Метод класса А постоянно обращается к полям класса Б. Скорее всего, этот метод должен жить в классе Б.
🛠 3. Refactoring (Рефакторинг)
Это процесс изменения структуры кода без изменения его поведения.
Золотое правило Бойскаута:
"Оставь место стоянки чище, чем оно было до твоего прихода."
Зашли в файл поправить баг? Поправьте заодно название переменной или вынесите метод. Маленькие улучшения каждый день спасают проект.
💻 До и После
🤢 Было (Smelly Code):
public void process(Order o) {
// Magic Number + Long Method + Feature Envy
if (o.getItems().size() > 0 && o.getStatus() == 1) {
double total = 0;
for (Item i : o.getItems()) {
total += i.getPrice() * 1.2; // Что такое 1.2? НДС? Наценка?
}
System.out.println("Total: " + total); // Hardcoded output
}
}
😎 Стало (Clean Code):
private static final double TAX_RATE = 1.2;
private static final int STATUS_ACTIVE = 1;
public void printOrderTotal(Order order) {
if (isEligibleForProcessing(order)) {
double total = calculateTotal(order);
outputResult(total);
}
}
private boolean isEligibleForProcessing(Order order) {
return !order.isEmpty() && order.getStatus() == STATUS_ACTIVE;
}
private double calculateTotal(Order order) {
return order.getItems().stream()
.mapToDouble(item -> item.getPrice() * TAX_RATE)
.sum();
}
Код стал читаемым, как книга.
🔥 Итог
1. Технический долг неизбежен, но его нужно гасить.
2. Запахи кода (магические числа, дубликаты) подсказывают, где рефакторить.
3. Рефакторинг делаем только при наличии Тестов (иначе вы просто ломаете рабочий код).
#Refactoring #CleanCode #TechnicalDebt #CodeSmells #Java
📲 Мы в MAX
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2