Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Refactoring
1.
2. Рефакторинг - изменение во внутренней структуре
программного обеспечения, имеющее целью
облегчить понимание его работы и упростить
модификацию, не затрагивая наблюдаемого
поведения.
3. Цель рефакторинга - сделать код программы
легче для понимания; без этого рефакторинг
нельзя считать успешным.
4. Зачем нужно проводить рефакторинг?
рефакторинг улучшает композицию программного обеспечения;
рефакторинг облегчает понимание программного обеспечения;
рефакторинг помогает найти ошибки;
рефакторинг позволяет быстрее писать программы.
6. Нет, ну серьёзно…
Применяйте рефакторинг в следующих случаях:
правило трех ударов;
при добавлении новой функции;
если требуется исправить ошибку;
при ревьировании.
7. На что следует обращать свое внимание
дублирование кода;
длинный метод;
большой класс;
длинный список параметров;
«завистливые» функции;
избыточные временные переменные;
классы данных;
несгруппированные данные.
8. Проблемы, возникающие при проведении
рефакторинга
базы данных;
изменение интерфейсов;
изменения дизайна, вызывающие трудности при рефакторинге.
9. Когда рефакторинг не нужен?
Если существует необходимость переписать программу с нуля.
Если приближается завершающая стадия проекта.
11. Методы рефакторинга. Извлечение метода.
Чем больше строк кода в методе, тем сложнее разобраться в том, что он делает. Это
основная проблема, которую решает этот рефакторинг.
12. Порядок рефакторинга:
1. Создайте новый метод и назовите его так, чтобы название отражало суть того, что
будет делать этот метод;
2. Скопируйте фрагмент кода в новый метод. Удалите этот фрагмент из старого
места и замените вызовом вашего нового метода;
3. Найдите все переменные, которые использовались в этом фрагменте кода.
Переменные, которые используются только в этом методе следует оставить;
4. Если переменные объявлены перед интересующим вас участком кода, значит, их
следует передать в параметры нового метода;
5. Если вы видите, что локальная переменная как-то изменяется в вашем участке
кода, это может означать, что её изменённое значение понадобится дальше в
основном методе. Проверьте это. Если это так, то значение этой переменной
следует возвратить в основной метод.
13. Встраивание метода
Если тело метода состоит из простого делегирования к другому методу, то
следует воспользоваться данным методом. Само по себе такое делегирование
— не проблема. Но если таких методов довольно много, становится очень
легко в них запутаться.
14. Порядок рефакторинга:
1. Убедитесь, что метод не переопределяется в подклассах. Если
он переопределяется, воздержитесь от рефакторинга;
2. Найдите все вызовы метода. Замените эти вызовы содержимым
метода;
3. Удалите метод.
15. Инкапсуляция поля
Инкапсуляция – один из основных принципов ООП. Если сделать данные открытыми,
объекты смогут читать и изменять их значения без ведома объекта-владельца этих
данных. Тем самым данные отделяются от поведения.
Это считается неправильным, потому что уменьшает модульность программы. Когда
данные и использующее их поведение сгруппированы вместе, проще изменять код,
поскольку изменяемый код расположен в одном месте, а не разбросан по всей
программе.
16. Порядок рефакторинга:
1. Создайте геттер и сеттер для поля;
2. Найдите все обращения к полю. Замените получение значения
из поля геттером, а установку новых значений в поле —
сеттером;
3. После того, как все обращения к полям заменены, сделайте
поле приватным.