«Публичные» вложенные классы или нет

Предположим, у меня есть класс «Приложение». Для инициализации требуются определенные настройки в конструкторе. Давайте также предположим, что количество настроек настолько велико, что вынуждает их размещать в своем собственном классе.

Сравните следующие две реализации этого сценария.

Реализация 1:

class Application 
{
   Application(ApplicationSettings settings) 
   {
       //Do initialisation here
   }
}

class ApplicationSettings 
{
   //Settings related methods and properties here
}

Реализация 2:

class Application 
{
   Application(Application.Settings settings) 
   {
       //Do initialisation here
   }

   class Settings 
   {
      //Settings related methods and properties here
   }
}

Для меня второй подход очень предпочтителен. Это более читабельно, потому что сильно подчеркивает связь между двумя классами. Когда я пишу код для создания экземпляра класса Application в любом месте, второй подход выглядит красивее.

Теперь просто представьте, что у самого класса Settings, в свою очередь, есть такой же «связанный» класс, и у этого класса тоже есть. Пройдите только три таких уровня, и наименование класса выходит из-под контроля в случае «не вложенного». Однако, если вы гнездитесь, вещи все равно остаются элегантными.

Несмотря на вышесказанное, я читал людей, которые говорили в StackOverflow, что вложенные классы оправданы, только если они не видны внешнему миру; то есть если они используются только для внутренней реализации содержащего класса. Обычно цитируемым возражением является раздувание размера исходного файла класса, но частичные классы являются идеальным решением для этой проблемы.

Мой вопрос: почему мы опасаемся "публичного" использования вложенных классов? Есть ли другие аргументы против такого использования?

Ответы на вопрос(2)

Ваш ответ на вопрос