30 lines
3.0 KiB
Markdown
30 lines
3.0 KiB
Markdown
#рефакторинг #запахи_кода
|
||
|
||
![[Pasted image 20241113223522.png]]
|
||
|
||
> Когда класс пытается взять на себя слишком многое, это часто проявляется в чрезмерном количестве полей. А отсюда недалеко и до дублирования кода.
|
||
> Как и класс с большим количеством переменных экземпляра, класс со слиш ком большим количеством кода создает предпосылки для дублирования кода, ха оса и гибели. Простейшее решение (а мы уже не раз говорили, что предпочитаем простые решения) — это устранение избыточности в самом классе. Если у вас есть пять методов по сотне строк и с большим количеством дублируемого кода, возможно, их можно заменить пятью методами по десять и еще десятком двух строчных методов, выделенных из исходных.
|
||
> Часто лучшей подсказкой для разделения являются клиенты такого класса. Посмотрите, используют ли клиенты подмножество функций класса. Каждое та кое подмножество является возможным отдельным классом
|
||
|
||
### **Признаки**
|
||
- Класс содержит множество полей/методов/строк кода.
|
||
|
||
### **Причины появления**
|
||
- Как и в случае с длинными методами, чаще всего программисту ментально проще добавить фичу в существующий класс, чем создать новый класс для этой фичи
|
||
|
||
![[Pasted image 20241113224408.png]]
|
||
|
||
### **Рефакторинги**
|
||
- [[Извлечение класса (Extract Class)]]
|
||
- [[Извлечение суперкласса (Extract Superclass)]]
|
||
- [[Замена кода типа подклассами (Replace Type Code with Subclasses)]]
|
||
|
||
![[Pasted image 20241113224452.png]]
|
||
|
||
### **Результаты**
|
||
- Рефакторинг таких классов избавит разработчиков от необходимости запоминать чрезмерное количество имеющихся у класса атрибутов
|
||
- Во многих случаях разделение больших классов на части позволяет избежать дублирования кода и функциональности
|
||
|
||
### **Ссылки**
|
||
- https://refactoring.guru/ru/smells/large-class
|
||
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]] |