Большой класс
Симптомы и признаки
Класс содержит множество полей/методов/строк кода.
![](/images/refactoring/content/smells/large-class-01.png?id=acac82f25cc90aaa413c2daefebf0e4b)
Причины появления
Классы редко бывают большими изначально. Но со временем постепенно многие из них «раздуваются» в связи с развитием программы.
Как и в случае с длинными методами, чаще всего программисту ментально проще добавить фичу в существующий класс, чем создать новый класс для этой фичи.
![](/images/refactoring/content/smells/large-class-02.png?id=973b37334ae57489945a88b9327f81e3)
Лечение
Когда класс реализует слишком обширный функционал, стоит подумать о его разделении:
-
Извлечение класса поможет, если часть поведения большого класса может быть выделена в свой собственный компонент.
-
Извлечение подкласса поможет, если часть поведения большого класса может иметь альтернативные реализации либо используется в редких случаях.
-
Извлечение интерфейса поможет, если нужно иметь список операций и поведений, которые клиент сможет использовать.
-
В классах графического интерфейса часто можно найти данные и поведения, которые не относятся к непосредственной отрисовке интерфейса, а скорее отвечают за общую логику работы. Такие данные и поведения следует выделить в отдельный класс предметной области, который бы управлял работой графического интерфейса. При этом может оказаться необходимым хранить копии некоторых данных в двух местах и обеспечить их согласованность. Дублирование видимых данных предлагает путь, которым можно это осуществить.
![](/images/refactoring/content/smells/large-class-03.png?id=f0a0109f731dbc420ffe385cb658f0de)
Выигрыш
-
Рефакторинг таких классов избавит разработчиков от необходимости запоминать чрезмерное количество имеющихся у класса атрибутов.
-
Во многих случаях разделение больших классов на части позволяет избежать дублирования кода и функциональности.