複数のクラスを含むC#ファイルの命名規則は何ですか?


20

C#プロジェクトでは、小規模で密接に関連するクラスを同じ.csファイルに頻繁にグループ化します。この方法により、実際のコードにほとんど含まれない無数のファイルを処理する際の摩擦が軽減されます。それでも、複数のクラスを含むファイルに名前を付ける確立されたプラクティスはありますか?


13
率直に言って、非常に小さなクラスであっても、1ファイル1クラスを好む
Felice Pollano

これらの密接に関連するクラスが属するグループごとに名前を付けることができます。
V4Vendetta

たぶん、それらのクラスは小さすぎますか?個人的には、複数の列挙型を1つのファイルにグループ化するだけです(コンテキストに応じて、クラスとともに、場合によってはすべての列挙型を一緒に)。
コンラッド・モラウスキー

@Felice:MSpecを見てください:)
ブライアンベッチャー

回答:


18

私のアドバイス:ファイルが多すぎることを意味する場合でも、複数のクラスを含むファイルや、files == classesという名前のファイルは避けてください。それらをフォルダに整理してみてください。非常に特殊なケースでは、ネストされたクラスがあるかもしれません。この場合、メインクラスとネストされたクラスを、1つの部分クラスを持つ異なるファイルに分離するのが理にかなっています。この場合、次の命名規則を使用します。

MyEnumerable.cs
MyEnumerable.MyEnumerator.cs

おそらく、あなたのケースでマルチパートのファイル名を使用することもできます。


4
もう1つのアイデア。Visual Studio Project内で複数の.csファイルをグループ化して、それらがすべてツリーの同じノードの下に表示されるようにすることができます(.Designer.csファイルなど)。これにより、クラスが密接に関連していることがわかります。

6

少なくとも1つのパブリッククラスではなく、1つのファイルに複数のクラスが含まれないようにしてください。複数のクラスを持つクラスファイルに名前を付けるときは、わかりやすいファイル名を選択してください。

借り換え:


4

そのようなファイルの命名方法について質問することで、あなたにとって問題のあるコードの匂いがすでに特定されていることを考慮してください。これは簡単には消えない問題です。

理由に関係なく、ファイルに複数のクラスがある場合、理にかなった名前を選択することは困難であることがわかります。ファイルが何らかの方法で関連している場合でも、クラスのセットに割り当てるグループ名に完全には適合しません。

したがって、簡単な答えは、これらの種類のファイルに名前を付けるための認識または確立された標準はないということです。私の提案は、あなたのチームと一緒に座ってコードの組織に目を向け、少しリファクタリングの努力をして物事を少し整理することです。

ただし、作業を少し簡単にするために、追加のクラスがネストされているか、独立しているかを尋ねます。独立している場合、これらのクラスはより簡単に独自のファイルに分割でき、各ファイルには単一のクラスの名前が含まれます。ネストされている場合、そのようなクラスの編成方法についてさらに決定する必要がありますが、ネストされたクラスをすぐに削除する必要はないため、ファイルは最も外側のクラスに名前が付けられます。入れ子に関する限り、いくつかの状況下での入れ子には多くの議論があり、いくつかの合理的なものがあり、私のアドバイスは、賢明な名前空間とより組織化されたソースコード構造の作成が取り組むより良い方法であるかどうかを尋ねることです問題。

しかし現実的には、プロジェクトの存続期間の終わりまでに、すべてのファイルに単一のクラスとそれに対応する素敵なディレクトリ/名前空間構造のみが含まれることを望んでいることがわかります。

乾杯、


3

以前は1つのファイルに複数のクラスを置くことに全力を尽くしていましたが、実際にプログラマーとして仕事を始めて以来(私自身ではなく)、1つのファイルに多くのクラスがあるメンテナンスの悪夢になりかねませんでした。確かに、Visual StudioはF12(定義に移動)を使用することで大いに役立ちます。

私が始めたのは、次のような命名規則を使用することです。namespace.classname.csそうすれば、各ファイルの内容を正確に把握でき、ファイルの全体的なコンテキストも提供します。クラスがデフォルトの名前空間にある場合は、先に進み、classname.cs(Javaに類似)を使用します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.