この質問に対する答えは、多くの場合、手元にあるタスクに依存するため、絶対的なものではありません。他の人が再利用するためにある種の SDK を作成している場合、名前空間は非常に重要です。ただし、少数のクラスのみを使用して社内ツールを作成している場合、名前空間はほとんど重要ではありません。
クラス
一般的に言えば、クラスには独自のファイルが必要です。これにより、コード ソリューション内を移動する方法が簡素化され、開発と保守が容易になります (たとえば、全員が同じファイルを変更している場合、変更をマージするのははるかに困難になります)。次のような状況では、1 つのクラスを複数のファイルに分割することが許容される場合があります。
ネストされたクラスがある場合、ネストされたクラスごとに独自のファイルを持つことができます。
デザイナー コードなど、クラスに自動生成された部分がある場合。
非表示プロパティの共通セットやインターフェイスの共通実装など、クラスに固定部分がある場合。
私たちのプロジェクトの 1 つで、多くのクラスが公開するインターフェースの共通の実装があります。多重継承がないため、クラスごとに追加のファイルを自動生成するミックスイン アプローチを採用しています。これは、自動ではなく手動で行うことができました (元々はそうでした)。
他の状況もありますが、これはやや主観的であり、独自のプロジェクトの要件に依存しています。
名前空間
名前空間は、通常、タイプの適切なグループ化に焦点を当てる必要があります。名前空間は、開発者が探しているものを直感的に見つけられるようにする必要があります。多くの小さなプロジェクトでは、 のような単一の名前空間MyAwesomeTool
で十分ですが、多くのクラスを含む大規模なプロジェクトでは、より論理的なグループ化が必要になります。SDK や .NET BCL などの大規模なプロジェクトは、名前空間に依存して、そうでなければ圧倒的に大規模な型のコレクションを分解します。各名前空間レベルは、System.Windows.Forms
またはSystem.Drawing
またはなど、そこにある可能性のある追加情報を提供しますMicrosoft.VisualBasic
。
名前空間を作成するときは、その名前空間と関連するプロジェクトの目的をすべて考慮する必要があります。プロジェクトが社内で小規模な場合は、型をグループ化するために必要なだけなので、好きなように名前空間を呼び出します。プロジェクトが外部から見える場合、または大量のタイプが含まれている場合は、他のユーザーが探しているタイプを直感的に見つけられるように、論理的で意味のあるグループ化について慎重に検討してください。
結論
すべての状況で機能する厳密で迅速なルールはありません。コードをファイルにどのように配置するかは、独自の開発プロセスに関連しており、あなたとあなたのチームに影響を与えます。1 つのファイル内のすべてのクラスを使用して開発するのは非常に困難ですが、コンパイルされた製品はまったく同じように動作します (1 つのファイルのアプローチがエラーにつながらない場合)。一方、名前空間の配置は将来の開発との消費者に関連します。そのため、間違った結果はより深刻になる可能性があります。
- 現在の開発と将来の保守を簡素化する方法でクラスを編成することを目指してください。
- すべての開発を簡素化し、必要に応じてエンド ユーザーのエクスペリエンスを簡素化する方法で名前空間を整理することを目指します。