Занадто великий клас
Симптоми і ознаки
В класі безліч полів/методів/рядків коду.
![](/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)
Виграш
-
Рефакторинг таких класів позбавить розробників від необхідності запам’ятовувати надмірну кількість атрибутів класу.
-
У багатьох випадках розділення великих класів на частини дозволяє уникнути дублювання коду і функціональності.