Если вы обнаружите, что создаете частичные макеты на регулярной основе, это может быть признаком того, что слишком большое количество состояний и функциональности выбрасывается в небольшое количество классов. Это может сделать ваш код более сложным для поддержки и рассуждать и, следовательно, сложнее для модульного тестирования. Это также может привести к дублированию кода или циклическим зависимостям, если позже вы обнаружите, что некоторому другому компоненту в вашей системе требуется подмножество функций, содержащихся в одном из ваших больших классов.
Попытайтесь определить связанные группы функциональных возможностей и разбить их на более мелкие вспомогательные классы, которые можно протестировать независимо. Это облегчит понимание кода, позволит вам писать более детальные модульные тесты, и вы можете найти возможности повторно использовать функции, которые вы разделили в различных контекстах, когда-нибудь в будущем. Если вы используете инфраструктуру внедрения зависимостей, такую как Spring или Guice, вам будет легко соединить эти объекты вместе при запуске приложения.
Изучение лучшего способа реорганизации больших классов - это то, что человек изучает на опыте. В целом, однако, я пытаюсь посмотреть, что делает класс, и дать имена различным ролям, которые он играет в разные моменты обработки. Затем я создаю новые классы для этих ролей. Например, если бы у меня был класс, который читает файл журнала сервера и отправляет электронное письмо администратору при обнаружении там определенных записей, я мог бы преобразовать его в один класс, который знает, как анализировать файлы журнала, - второй класс, который ищет записи триггера. и третий, который знает, как уведомить администраторов. Хитрость заключается в том, чтобы ограничить количество «знаний», содержащихся в каждом классе. Это также дает вам возможность абстрагироваться от общих понятий. Например, разбивая ваши классы таким образом, вы могли бы в будущем поддерживать различные механизмы уведомления или типы условий триггера, не влияя на ваш класс синтаксического анализа журнала или его модульный тест.