假设我有一个类“应用程序”。为了被初始化,它在构造函数中需要一定的设置。我们还假设设置的数量非常多,以至于将它们放置在自己的类中是很有吸引力的。“公共”嵌套类是否
比较此方案的以下两种实现。
实现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上说过,只有当外部世界不可见时,嵌套类才是合理的;也就是说,如果它们仅用于包含类的内部实现。通常引用的反对意见是膨胀了包含类的源文件的大小,但部分类是这个问题的完美解决方案。
我的问题是,为什么我们要警惕“公开暴露”使用嵌套类?还有其他反对这种用法的论据吗?
我最近不得不写一些builder代码,并记得这篇文章。原来这是一个非常有用的方法,所以谢谢。 – 2010-06-12 13:33:53
*“它也让构建者访问外部类的私有成员”*只有明确的引用,正确(我敢肯定它不像Java的内部类中那样是隐含的)。 – samosaris 2017-06-19 17:44:15