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