Сайт курса: https://refactoring.guru/course

Сейчас курс можно купить по “акционной цене”, за ~1000 руб, рекомендую приобрести !

В курсе много полезных советов по ОО-рефакторингу кода.

Ниже — лишь основные тезисы/содержание.

/**/

1. Раздувальщики / длинный метод

Метод содержит слишком большое число строк кода (обычно длина метода более десяти строк должна начинать вас беспокоить).

1.1. Длинный метод

Метод содержит слишком большое число строк кода (обычно длина метода более десяти строк должна начинать вас беспокоить).

1.2. Большой класс

В классе множество полей/методов/строк кода.

1.3. Одержимость элементарными типами

Использование элементарных типов вместо маленьких объектов для небольших задач (например, валюта, диапазоны, специальные строки для телефонных номеров и т.п.) Использование констант для кодирования какой-то информации (например, константа USER_ADMIN_ROLE = 1 для обозначения пользователей с ролью администратора). Использование строковых констант в качестве названий полей в массивах.

1.4. Длинный список параметров

Количество параметров метода больше трёх-четырёх.

1.5. Группы данных

Иногда в разных частях кода встречаются одинаковые группы переменных (например, параметры подключения к базе данных). Такие группы следует превращать в самостоятельный класс. Хорошая проверка: удалить одно из значений данных и проверить, сохранят ли смысл остальные. Если нет, это верный признак того, что группа переменных напрашивается на объединение их в объект.


2. Нарушители ОО-дизайна

Все эти запахи являют собой неполное или неправильное использование возможностей объектно-ориентированного программирования.

2.1. Злоупотребление switch

У вас есть сложный оператор switch или последовательность if-ов.

2.2. Временное поле

Временные поля – это поля, которые нужны объекту только при определённых обстоятельствах. Только тогда они заполняются какими-то значениями, оставаясь пустыми в остальное время. Такой код очень трудно понять. Вы ожидаете увидеть данные в полях объекта, а они почему-то пустуют почти все время.

2.3. Отказ от наследства

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

2.4. Альтернативные классы с разными интерфейсами

Два класса выполняют одинаковые функции, но имеют разные названия методов.


3. Утяжелители изменений

Эти запахи приводят к тому, что при необходимости что-то поменять в одном месте программы, вам приходится вносить множество изменений в других местах. Это серьезно осложняет и удорожает развитие программы.

3.1. Расходящиеся модификации

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

3.2. Стрельба дробью

При выполнении любых модификаций приходится вносить множество мелких изменений в большое число классов.

3.3. Параллельные иерархии наследования

Всякий раз при создании подкласса какого-то класса приходится создавать ещё один подкласс для другого класса.


4. Замусориватели

Замусориватели являют собой что-то бесполезное и лишнее, от чего можно было бы избавиться, сделав код чище, эффективней и проще для понимания.

4.1. Комментарии

Метод содержит множество поясняющих комментариев.

4.2. Дублирование кода

Два фрагмента кода выглядят почти одинаковыми.

4.3. Ленивый класс

На понимание и поддержку классов всегда требуются затраты времени и денег. А потому, если класс не делает достаточно много, чтобы уделять ему достаточно внимания, он должен быть уничтожен

Подробнее

4.4. Класс данных

Классы данных — это классы, которые содержат только поля и простейшие методы для доступа к ним (геттеры и сеттеры). Это просто контейнеры для данных, используемые другими классами. Эти классы не содержат никакой дополнительной функциональности и не могут самостоятельно работать с данными, которыми владеют. Подробнее.

4.5. Мёртвый код

Переменная, параметр, поле, метод или класс больше не используются (чаще всего потому, что устарели). Лучше всего мёртвый код обнаруживается при помощи хорошей среды разработки (IDE).

4.6. Теоретическая общность

Класс, метод, поле или параметр не используются.


5. Опутыватели связями

Все запахи из этой группы приводят к избыточной связанности между классами, либо показывают, что бывает если тесная связанность заменяется постоянной делегацией.

5.1. Завистливые функции

Метод обращается к данным другого объекта чаще, чем к собственным данным.

5.2. Неуместная близость

Один класс использует служебные поля и методы другого класса.

Подробнее

5.3. Цепочка вызовов

Вы видите в коде цепочки вызовов вроде такой $a->b()->c()->d()

Подробнее

5.4. Посредник

Если класс выполняет одно действие — делегирует работу другому классу — стоит задуматься, зачем он вообще существует.

Подробнее

5.5. Неполнота библиотечного класса

Библиотеки через некоторое время перестают удовлетворять требованиям пользователей. Естественное решение — внести изменения в библиотеку — очень часто оказывается недоступным, так как библиотека закрыта для записи.

Подробнее


Источник:

(1) Швец. “Погружение в рефакторинг”. https://refactoring.guru/course

Tags

Нет комментариев

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.