Я бы сказал, что иногда можно использовать закрытые вложенные классы, но обычно это не очень хороший дизайн. Однажды я реорганизовал существующий очень большой класс в своем проекте, чтобы дать ему частные вложенные классы. Причина, по которой я это сделал, заключалась в том, что некоторые методы принимали десятки параметров, и это давало им более логичное группирование. В этом смысле я считаю вложенные классы хорошим быстрым решением. Это имело смысл, потому что никто за пределами этого класса не мог использовать ни одно из этих полей.
Как правило, я бы уклонялся от использования вложенных классов в первоначальном проекте - и дважды подумал, прежде чем рассматривать их в редизайне. При обслуживании, если у вас есть время, лучше перепроектировать весь класс и разделить их на отдельные классы в отдельных внутренних файлах.
Я думаю, что эта стратегия также лучше для тестируемости , чем использование вложенных классов. Из-за больших зависимостей с внешним классом и другими классами в приложении мои рефакторированные вложенные классы были не намного проще для модульного тестирования, чем оригинальный большой класс, который передавал много параметров. Если вы разделите вложенные классы так, чтобы они были самостоятельными, вы можете написать более дискретные модульные тесты , которые фактически проверяют блоки , а не эффективно объединять модульные тесты для внешнего класса и внутреннего класса. Это даст вам больше уверенности в том, чтобы сказать: «Да, внутренний класс работает на уровне модульного теста» и «Да, внешний класс работает на уровне модульного теста» (который также проверяет, как он сочетается с внутренним классом, например, в вычислительных формулах).