假设我有一个类“应用程序”。为了被初始化,它需要在构造函数中进行某些设置。让我们还假设设置的数量如此之多,以至于将它们放在自己的类中是令人信服的。
比较此方案的以下两种实现。
实施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 上说嵌套类只有在它们对外界不可见时才是合理的;也就是说,如果它们仅用于包含类的内部实现。普遍引用的反对意见是膨胀包含类的源文件的大小,但部分类是该问题的完美解决方案。
我的问题是,为什么我们要警惕嵌套类的“公开”使用?还有其他反对这种使用的论据吗?