Oct 26, 2011

Рефакторинг. Улучшение существующего кода - Мартин Фаулер




Книга будет интересна тем кто не пользуется pycharm :) Ну действительно, кому интересно как делается "Introduce variable", если с этим отлично справляется IDEшка? )))

Если серьезно, то в книге много полезной информации для чего делаются разные виды рефакторинга и, соответственно, есть каталог типов рефакторинга. Пометим несколько моментов..
Перед тем как проводить рефакторинг проверяется работоспособность кода, пишутся тесты.
Рефакторинг проводится поэтапно шаг за шагом, небольшими кусками кода и, обязательно, отдельно от добавления новой функциональности.
Не надо пытаться покрыть тестами все возможные варианты выполнения кода, но обязательно надо проверить все узкие места.

Источники неприятных запахов

  • Дублирование кода
  • Длинный метод
  • Большой класс
  • Длинный список параметров
  • Расходящиеся модификации (когда один класс модифицируется различными способами по разным функциональным причинам)
  • Стрельба дробью (изменения разбросаны по коду)
  • Завистливые функции (метод класса больше интересуется другим классом а не собственным)
  • Группы данных
  • Одержимость элементарными типами (валюта, номера телефонов, почтовые индексы)
  • Операторы switch
  • Параллельные иерархии наследования
  • Ленивый класс (лишний)
  • Теоретическая общность (программированное наперед)
  • Временное поле (когда в объекте атрибут устанавливается только при определенных обстоятельствах)
  • Цепочки сообщений (o.getBla().getFoo().getBar()...)
  • Посредник (лишний делегат)
  • Неуместная близость
  • Альтернативные классы с разными интерфейсами
  • Неполнота библиотечного класса
  • Классы данных
  • Отказ от наследства (например, пустой переопределенный метод)
  • Комментарии

No comments: