Skip to content

Latest commit

 

History

History
205 lines (204 loc) · 9.07 KB

File metadata and controls

205 lines (204 loc) · 9.07 KB

Содержание

  • Предисловие
    • На кого это рассчитано
    • Чем этот текст не является
    • Ограничения и применимость
    • Что хорошо знать перед прочтением
    • Зачем нужна ещё одна книга
  • Введение
    • Польза для разработчиков
    • Польза для бизнеса
    • «Плохой» и «хороший» код
      • Тяжело читать
      • Тяжело менять
      • Тяжело тестировать
      • «Не помещается в голову»
      • Запахи кода
  • Прежде, чем начать
    • Определить границы
    • Покрыть тестами
      • Выявить больше крайних случаев
      • Определить явные и неявные входные данные
      • Конкретизировать желаемый результат
      • Настроить автотесты
    • Ужесточить настройки линтеров и компилятора
      • Перевести «предупреждения» в разряд «ошибок»
      • Настроить больше автоматизированных правил
  • Во время рефакторинга
    • Двигаться маленькими шагами
    • Создавать маленькие, но подробные пул-реквесты
    • Проверять каждое изменение
    • Применять по одной технике за раз
    • Не добавлять фич, не чинить багов
    • Соблюдать приоритет преобразований
    • Не смешивать рефакторинг тестов и кода приложения
  • Низко-висящие фрукты
    • Форматирование кода
    • Линтинг кода
    • Возможности языка
    • Возможности встроенных API
    • Возможности среды разработки
  • Имена
    • Общие рекомендации
    • Слишком короткие имена
    • Слишком длинные имена
      • Вариант именования функций
    • Одинаковые имена у разных сущностей
    • Повсеместный язык
    • Врущие имена
    • Типы для описания домена
  • Дублирование кода
    • Не любое дублирование — зло
    • Переменные для данных
    • Функции для действий
  • Абстракция
    • Намерение и реализация
    • Фрактальная архитектура
    • Разделение ответственности
      • Декомпозиция задач
      • Принцип единственной ответственности
    • Инкапсуляция
  • Функциональный пайплайн
    • Преобразования данных
    • Состояния данных
    • Невыразимость неправильного
    • Валидация данных
      • Пропущенные состояния
      • DTO и десериализация
    • Селекторы и маппинг данных
  • Условия и сложность кода
    • Цикломатическая и когнитивная сложность
    • Плоское лучше вложенного
    • Ранний возврат
      • Рендер компонентов
    • Переменные, предикаты и булева алгебра
      • Законы де Моргана
      • Предикаты
    • Примитивный паттерн-матчинг
    • Стратегия
    • Null-объект
  • Сайд-эффекты
    • Чистые функции
      • Ссылочная прозрачность
    • Неизменяемость по умолчанию
    • Функциональное ядро в императивной оболочке
      • Адаптеры для эффектов
    • Команды и запросы
      • CQS и сгенерированные ID
      • CQRS
  • Обработка ошибок
    • Виды ошибок
    • Техники обработки
    • Выбрасывание паник
      • Неожиданные ошибки и потеря контекста
      • Разные типы ошибок
      • Fail Fast
      • Rethrow
      • Преимущества
      • Проблемы
    • Result-контейнеры
      • Сигнатура точнее отражает процесс
      • Явная обработка
      • Централизованная обработка
      • Паники отдельно
      • Множественные ошибки
      • Распаковка
    • Связывание результатов
      • Проблемы
      • Когда предпочесть паники
    • Cross-Cutting Concerns
    • Зоопарк обработчиков
    • Иерархия отлова ошибок
      • Обёртки над «низкоуровневым» кодом
      • Обработчики пользовательских сценариев
      • Обработчики последней надежды
    • Предвалидация данных
  • Интеграция модулей
    • Зацепление и связность
      • Разделение ответственности
      • Правило интеграции модулей
      • Разделение задач
      • Как определить связность
    • Контракты
      • События и сообщения
    • Зависимости
      • Объектная композиция
        • Разделение данных и поведения
        • Принцип разделения интерфейса
      • Функциональная композиция
        • Отказ от зависимостей
        • Другие способы управления зависимостями
    • Целостность и согласованность
      • Агрегаты
      • Предвалидация на входе в контекст
  • Обобщения и иерархии
    • Обобщённые алгоритмы
    • Обобщённые типы
    • Наследование и композиция
      • Наследование
      • Принцип подстановки Лисков
  • Архитектура
    • Не про «папочки»
    • Моделирование бизнес-процессов
      • Повсеместный язык
      • Доменная модель
      • Направление зависимостей
    • Связь с внешним миром
      • Порты и адаптеры
      • 100500 видов архитектур
    • UI-логика
      • Реактивность
    • Тестирование
  • Декларативность
    • Читаемость
    • Надёжность
    • Расширяемость
    • Конфигурируемость
    • Автоматное программирование
    • Налог на декларативность
      • Сложность поддержки
      • Производительность
  • Статическая типизация
    • Повсеместный язык
    • Моделирование домена
      • Типизация в TypeScript
    • Сверка модели с реальностью
      • Нарушения договорённостей
    • Дизайн API
  • Рефакторинг тестового кода
    • «Тесты» для тестов
    • «Хрупкие» тесты
      • Тесты-дубликаты
      • Тесты, которые никогда не ломаются
      • Тесты простых функций
      • Регрессии
  • Рядом с кодом
    • Источники правды
    • Комментарии
      • Лживые комментарии исправить или удалить
      • Расплывчатые комментарии уточнить
      • Мелкие уточняющие комментарии перенести в код
      • «Пересказам названий» добавить контекста
      • TODO и FIXME превратить в задачи
    • Документация
    • Доступность знаний
  • Рефакторинг как процесс
    • Рефакторить или переписывать
    • Ресурсы
      • Время
      • Накопленные знания
      • Опыт
    • Выгоды и риски
    • Мета-информация о проекте
    • Эстимейты
    • Рефакторинг больших кусков кода
    • Частота и гигиена
    • Метрики
  • Заключение
    • Ошибки, фидбек и история изменений
    • Издателям
    • Переводчикам
    • Благодарности
    • Дополнительные материалы
  • Шпаргалка по техникам рефакторинга
  • Список литературы