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


12

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

私は引用する:

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

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

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

列挙型、クラスなどごとに1つの.csファイルを作成する必要があることを何度も耳にし、読んでいます。これがベストプラクティスです。

しかし、私は彼を納得させることはできません。彼は、Jon Skeetのような有名なプログラマーを信頼していないと言います。ところで、このトピックに関するスキートの意見は次のとおりです。列挙型を見つけるのに最適な場所はどこですか?

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


スキートカードをプレイしても、すべてに勝つことはできません。
JeffO

6
公平を期すと、Jon Skeetの名声の主張は優れたコード職人ではなく、C#の質問に迅速かつ正確に答えることができます(そして、彼は文字通り本を書きました)。これはうわさだけですが、おそらく眠ることはありません。これに関する彼の意見だけでは十分ではなく、彼の議論は強いものではありません。だからといって、彼がこの場合に間違っているわけではありません。先輩には「意見ではなく、事実と理由で私のところに来てください」と言う権利があると言っているだけです。
-pdr

2
ファイルごとに1つのクラスに投票します。そのクラスにのみ関連する列挙型またはインターフェイスは、ファイル内だけでなくクラス内にある必要があります。一方、それがあなたの仕事に適したコード書くことの一部であるので、それがどんなに不合理であっても、会社のコーディング標準に従うべきです。
ボブソン

2
ファイルごとに1つ以上のクラスがある場合、Visual StudioプラグインとしてのStyleCopには警告があることを指摘できます
ケビン

回答:


20

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

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

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

  3. 参照を右クリックして[定義に移動]を選択すると、いつでもクラスまたは列挙の定義にアクセスできます。したがって、実際にどこに配置してかまいません。

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

各オブジェクト定義を独自のファイルに設定すると、組織と構造に対する統一された統制のとれた期待が作成され、「これはなぜここにあるのか」などの疑問が生じません。それはとてもいいことです。

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


5
別の注意としては、コードのマージが悪いことです。確かに、あなたはそれらを行うことができますが、なぜ、そうする必要がないのですか?
ロバートハーベイ

4

おそらく、チームリーダーは、右クリックして「定義に移動」を選択するオプションがなかったときに、以前の時代に歯を切ったでしょう。ヘビースパイク開発モードになっているときは、再シャーパーで修正できるようになるまで、非常に大規模なクラスファイルを成長させます。

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

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