Небольшая шпаргалка для новичков, и всех остальных кто забыл, по книге Рефакторинг. Улучшение существующего кода Мартин Фаулер.
Зачем? Когда и как?
Тут особо углубляться не хочется, т.к. всё зависит от многих факторов: знания, необходимость, сроки, конкретный проект и т.д. и т.п.
Главное чего стоит не забывать и придерживаться, что всё хорошее, полезно в меру.
Код с душком
От чего надо избавляться в процессе рефакторинга и при написании новых программ.
- Дублирование кода.
- Длинный метод.
- Большой класс.
- Длинный список параметров.
- Расходящиеся модификации.
Если при добавлении нового функционала приходится модифицировать несколько методов и значительную часть кода в классе. - Стрельба дробью.
Если при добавлении нового функционала приходится вносить одинаковые изменения в большое число классов. - Завистливые функции.
Метод интересуется больше не тем классом, в котором находится, а другим. - Группы данных.
Похожие группы данных, в разных частях кода. - Одержимость элементарными типами.
- Операторы типа switch.
Незабываем про ООП. - Параллельные иерархии наследования.
Дублированный код. - Ленивый класс.
Не используемый или остался после рефакторинга. - Теоретическая общность.
Переизбыток абстракциями тоже вреден. - Временное поле.
Если у класса есть переменные, которые используются в одном методе из пяти, то лучше эту переменную передавать в тот самый метод через параметр, а не через конструктор или какой другой способ. - Цепочка сообщений.
Глубокая последовательность вызовов до необходимой информации, через объекты по иерархии классов. - Посредник.
Большую часть методов класс делегирует другому классу. - Неуместная близость.
Классы не должны выставлять наружу закрытые части, т.е. внутреннюю кухню. При наследовании, подклассы должны знать минимум необходимой информации о родителе. - Альтернативные классы с разными интерфейсами.
Дублирование логики. - Неполнота библиотечного класса.
Не бойтесь расширять функционал библиотечных классов: extension методы или декорировать объект библиотечного класса. - Классы данных.
Делите на логические единицы. Доступ на изменение данных должен быть осмысленным. - Отказ от наследства.
Если наследнику нужна лишь малая часть информации (данных, методов) о родителе. - Комментарии.
Свидетельство кода с «запахом», нужно рефакторить. Возможно код остаётся на будущий рефакторинг или описывает сложные манипуляции
Я не привожу решения этих проблем, поскольку за базу можно взять, то что описано в книге. А с учётом опыта, что-то своё.
И если хватит терпения и времени, то технику рефаторинга по Фаулеру, опишу в следующей статье.
Какой профит.
Простота в поддержке и понимании кода, а также в написании тестов.
Послесловие
Добавлю, что это лишь необходимый минимум.
В зависимости от сложности проекта и архитектуры в нём, на Арену будут выходить более тяжеловесные принципы, паттерны и методологии.
ссылка на оригинал статьи http://habrahabr.ru/post/169139/
Добавить комментарий