假設我有一個類「應用程序」。爲了被初始化,它在構造函數中需要一定的設置。我們還假設設置的數量非常多,以至於將它們放置在自己的類中是很有吸引力的。「公共」嵌套類是否
比較此方案的以下兩種實現。
實現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