web-dev-qa-db-ja.com

クラス、列挙型、その他のエンティティを別のファイルに配置する必要がありますか?

私の会社のチームリーダー\アーキテクトは、「ロジックによって接続されたエンティティ」を1つの.csファイルに配置すると、大規模プロジェクトの方が理解しやすいと主張しています。

私は引用します:

  • 「ロジックとインターフェースの全体構造とクラスは1か所で見ることができます。これは論争の余地のない議論です。同じことを見るには、ファイルの束でツール、クラスを使用する必要があります図、ナビゲーション用のR#など」

  • 「悪い理論に従って、分離されたファイルの軍隊はクールだと叫ぶかもしれませんが、既存のコードに変更を加えることになると、特にこのコードの作成者でない場合は、散在する多くのファイルを理解することは非常に困難です。したがって、フォーラムでは、「1つの列挙-1つのファイル」を書き込むことができますが、実際には、このアプローチは決して使用すべきではありません。

  • 「...開発者間のコードベースの分離については、現在、同じファイルを同時に編集することは問題ではありません。マージは問題ではありません。」

Enumやクラスごとに1つの.csファイルを作成する必要があると何度も聞いて読んだので、これがベストプラクティスです。

しかし、私は彼を納得させることができません。彼はジョン・スキートのような有名なプログラマーを信用しないと言っています。ちなみに、ここにこのトピックに関するスキートの意見があります: 列挙型を見つけるのに最適な場所はどこですか?

どう思いますか?本当の問題はありますか?または、それは好みの問題であり、組織のコーディング基準によって規制されるべきですか?

12
EngineerSpock

チームリードの議論にはいくつかの欠陥があります。

  1. 適切に設計されたクラスと列挙型は、論理的に意味のある場所だけでなく、プロジェクトのどこでも使用することを目的としています。

  2. XMLコメントで適切に文書化されているクラスと列挙型は、それを参照しているアイテムの上にカーソルを置くだけで、非常に自己記述的です。

  3. 参照を右クリックして[定義に移動]を選択すると、いつでもクラスまたは列挙型の定義にアクセスできます。そのため、問題はありませんwhereあなたはそれを置きます。

  4. オブジェクトを「論理的」な方法でまとめることは任意です(つまり、「論理的」の意味を考える必要があります。実際のプログラミングを行うこれらのクロックサイクルを費やしたいと思います)。

独自のファイルに各オブジェクト定義を設定すると、組織と構造の統一された規律ある期待が生まれ、「なぜこれがここにあるのか」などの疑問を投げかけません。それは非常にいいことです。

2つ以上のオブジェクトが論理的に関連している場合は、プロジェクトエクスプローラーでオブジェクトを独自のフォルダーに配置するだけです。

20
Robert Harvey

おそらく、チームリーダーは、右クリックして[定義に移動]を選択できなかった初期の時代に歯を切りました。ヘビースパイク開発モードにいるときは、リシャーパーに修正させるまで、かなり大規模なクラスファイルを拡大することはわかっています。

いずれにせよ、チームをタスクに導きたい場合は、これらのクラスと列挙型が子クラスと列挙型ではない理由を尋ねてください。本当に依存するエンティティである場合、それらを独立したエンティティとして宣言する理由はありません。これは彼が少しファトワを考えるのを助けるかもしれません。

4
Wyatt Barnett