2026-02-23 19:52:05 +03:00

30 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#рефакторинг #запахи_кода
![[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]]