クラス'Application'があるとします。初期化するには、コンストラクターで特定の設定が必要です。また、設定の数が多すぎて、独自のクラスに配置する必要があると仮定しましょう。
このシナリオの次の2つの実装を比較してください。
実装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
}
}
私にとっては、2番目のアプローチが非常に望ましいです。2つのクラス間の関係を強く強調しているため、読みやすくなっています。どこでもApplicationクラスをインスタンス化するコードを書くと、2番目のアプローチはよりきれいに見えます。
ここで、Settingsクラス自体に同様の「関連」クラスがあり、そのクラスにも同様のクラスがあると想像してみてください。そのようなレベルを3つだけ実行すると、「ネストされていない」場合にクラスの命名が手に負えなくなります。ただし、ネストした場合でも、物事はエレガントなままです。
上記にもかかわらず、StackOverflowで、ネストされたクラスは外部に表示されない場合にのみ正当化されると言っている人を読んだことがあります。つまり、それらが含まれているクラスの内部実装にのみ使用される場合です。よく言われる反対意見は、クラスのソースファイルを含むサイズを肥大化させることですが、部分的なクラスはその問題の完璧な解決策です。
私の質問は、ネストされたクラスの「公開された」使用になぜ警戒するのかということです。そのような使用に反対する他の議論はありますか?