.csファイル内に複数のクラスを作成することをお勧めしますか、または各.csファイルに個別のクラスを含める必要がありますか?
例えば:
public class Items
{
public class Animal
{
}
public class Person
{
}
public class Object
{
}
}
これが優れたアーキテクチャの悪い例であるという事実を1分間回避すると、.csファイルに複数のクラスが存在し、コードのにおいがしますか?
あなたが与えた例は、私の意見では実際には素晴らしいです。 内部クラスを宣言しているので、それらを同じファイルに保持することは完全に賢明です。これを回避する唯一の方法は、Items
クラスを部分クラスにして、複数のファイルに分割することです。私はこの悪い習慣を考えます。ネストされたクラスに対する私の一般的なポリシーは、それらは小さくプライベートである必要があるということです。これには2つの例外があります。
あなたが質問を少し違った言葉で言い、「それぞれの名前空間レベルのクラスを独自のファイルに入れるべきか?」と尋ねると、私の答えは「はい」.
クラスを設計するときは、単一責任の原則を尊重します。その形状がそのセマンティクスに従っている場合、コードの読み取りがはるかに簡単になるため、クラスごとにファイルを分割するのが賢明です。
機械的な観点から見ると、クラスごとにファイルがあることにはいくつかの利点があります。複数のクラスを異なるウィンドウで同時に開くことができます。深刻な開発者が2つ未満の画面で作業することはないため、これは特に重要です。私の頭のfrontでより多くのコンテキストを持つことができるということは、in私の頭。 (ほとんどのIDEでは同じファイルを2回開くことができますが、これは扱いにくいと思います)。
次の重要な側面は、ソース管理とマージです。クラスを別々にしておくことで、別々のクラスを変更する必要があるため、同じファイルに変更が加えられたときに多くの手間を省くことができます。
正直言って、ファイルに複数のルートクラスを追加しないでください。私の最後の仕事では、複数のクラスだけでなく複数の名前空間を持つファイルがあり、これが数千行のコードに拡張されました。 非常にフォローしようとするのは難しい。
密接に関連するクラスがある場合は、それらのファイルに同様の名前を付けるか、サブフォルダーに配置します。
クラスファイルを物理的に分離すると、(結局のところすべてではないことに注意してください)問題の分離と疎結合が生まれます。
一方、例では複数のルートクラスを示していません。ネストされたクラスがいくつかあり(注:これを設計できる場合は、ネストされたクラスをprivate
以外にしないようにしてください)、これは完全に正常で1つのファイルに含めます。
簡単に言えば、これを行うのは良い形ではありません。理由を説明します。少し後でソリューションが大きくなると、クラスがどこにあるかを忘れてしまいます。ファイル名は、内容やファイル名を表していないためです。 AnimalPersonObject.csは実現不可能です。
確かに、resharperなどのツールの機能を使用してタイプにジャンプすることでこれを回避できますが、ファイル(インターフェースを含む)ごとに1つのクラスは、.netだけでなくJavaとc ++、およびその他の多くの言語。メンテナンスの問題があまり発生しない言語であり、ジュニア開発者がコードを把握するのが難しいことに気付くでしょう。
ほとんどすべてのコード最適化ツールは、クラスを別のファイルに移動するように指示するので、私にとっては、これはコードのにおいであり、それを無力化するためにいくつかの方法が必要です:)
ファイルが非常にまとまりのあるものである場合(たとえば、いくつかの非常に短い類似した名前のファイルを使用する代わりになる場合)、それは良いアイデアになる可能性があります。
たとえば、Fluent NHibernateを使用する場合、Entity
とEntityMap
を1つのファイルに保存しておくと、ツールで何を言わなければならない場合でも簡単です。
ほとんどの場合、クラスを見つけにくくするだけです。慎重かつ慎重に使用してください。
別の問題は、同じファイルに非常に大きく類似したクラスがあることです-いつでもできないseeクラス宣言-間違ったクラスにブレークポイントを配置して、なぜそうしないのか疑問に思うかもしれませんヒットしない... grrr! :)