假设我有一个名为“Application”的类。为了初始化它,在构造函数中需要一些设置。同时,我们假设设置的数量非常多,以至于将它们放在独立的类中是很有必要的。
下面比较这种情况的两个实现:
实现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上看到有人说只有当嵌套类对外部世界不可见时才有合理之处;也就是说,它们仅用于包含类的内部实现。通常引用的反对意见是膨胀包含类的源文件大小,但部分类是解决这个问题的完美方案。
我的问题是,为什么我们对“公开暴露”嵌套类的使用持谨慎态度?是否还有其他反对这种用法的理由?