16

このトピックについて、会社のチームリーダー\アーキテクトと話し合いました。

彼は、「ロジックで接続されたエンティティ」を1つのcsファイルに配置すると、大規模なプロジェクトを理解しやすくなると主張しています。

私は引用します:

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

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

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

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

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

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

4

6 に答える 6

8

私の意見では:

大きな論理クラス内で必要な小さな列挙型とクラスは、そのファイルにとどまることができます。
ただし、小さいクラスと列挙型がそのスコープ外で使用される場合は、それらを別々に持つ必要があります(ただし、論理的にリンクされている場合は、それら自体が同じファイルにある可能性があります)。
だから私は論理的な結合について彼に同意します。

そうは言っても、他にも選択肢があると言わなければなりません。プロジェクト内に論理フォルダーを作成して、同じ論理環境または接続からのクラスを保持することができます。
現在のIDEは、Go-To機能を備えたソリューション全体で簡単にアクセスでき、移動できるため、コードを見つけることは問題ではありません。

論理コンポーネントを一緒に保つこと(それらが本当に密接に結合されている限り)は、スケーリング時に大きな利点があります。プロジェクトが大きくなるにつれて、それはより多くの混乱を招く傾向があり、それはまさに彼が避けようとしていることです。

ところで、スキートの意見をよく読むと、次のことに気付くでしょう。

そして、それらが他のクラスによって使用されることを想定して、それらを独自のファイルの最上位タイプにします。

于 2013-03-13T09:39:29.447 に答える
2

これは非常に意見の問題であるため、ここに投稿する方がよいでしょう。

https://codereview.stackexchange.com/

ただし、通常は、いくつかの例外を除いて、すべての型の定義を独自のファイルに配置する必要があります。

  • 抽象基本クラスまたはインターフェースのコントラクトを提供するために使用されるコードコントラクトクラスは、論理的にそのクラスに属します。

  • クラス内でパラメーター、プロパティ、または戻り値としてのみ使用される列挙型も、そのクラスに属します(ただし、クラス内にネストされません)。

おそらく他にもいくつかの例外がありますが、通常、各タイプは別々のファイルに入れる必要があります。

于 2013-03-13T09:34:12.987 に答える
2

興味深い質問ですが、これは私の見解です。

論理グループ(名前空間)と物理グループ(ファイル/プロジェクト)を区別する必要があります。

いずれの場合も、列挙は、列挙のみを含む名前空間ではなく、ビジネス的に属する論理名前空間に配置する必要があります。また、名前空間名に列挙を指定しないでください。'Enums'名前空間を使用することは意味がありません。概念が乱雑になり、それが属するドメインを指定しないためです。

列挙型が1つのタイプのクラスでのみ使用されている場合は、それをクラス自体に含めることもできます。このように、それがその特定のクラスに属していることは明らかであり、それ自体が同じコードファイルにあります。列挙型が複数のクラスで使用される汎用列挙型に似ている場合は、独自のコードファイルに個別に配置します。

ですから、私はあなたのチームリーダーに同意しません。同じファイルに入れる場合は、クラス自体の一部にします。同じファイルに入れる場合は実際に言っていることです。そうでない場合は、独自のコードファイルに入れます。とにかく、それはどういうわけかより一貫した使用法だと思います。

于 2013-03-13T09:44:42.867 に答える
1

あなたの「teamlead\architect」の意見は、主に名前空間の不適切な使用法に基づいていると思います。開発者からその議論を聞くたびに、それは名前空間の使用法がほとんど完全に不足しているためです(そして、たくさんのファイルを追加すると本当に厄介になります)

于 2013-03-13T09:27:43.940 に答える
1

ここでの「チームリーダー/アーキテクト」の多くの指摘には同意しません。

コードに関係する多くのことのように、それは意見の問題です。

個人的には、列挙型、クラスなどごとに1つの.csファイルを作成するのが最善だと思います。通常、列挙型に最も密接に関連するクラスが1つある場合、それらを同じファイルに入れます。

私は、企業が独自のコーディング標準を持つことができることを認めますが、ここで提案されたものは、私が良い習慣と考える多くのことに反するため、まったく間違っています。

于 2013-03-13T09:35:27.557 に答える
1

あなたと彼は、インターネット上の多数の複雑なオープンソースプロジェクトを見ることができます。github、codeplexなどの場所を見てください。

たとえば、MVCソースコードを見てください。ファイルごとのクラスがMicrosoftにとって十分であり、MVCのように複雑なプロジェクトである場合、皆さんにとっても十分である可能性が高いと思います。

個人的には、ファイルごとのクラス/インターフェイスのアプローチを使用しています(列挙型が少しあるなどの特定の場合を除きますが、主観的です)。問題はありません。

于 2013-03-13T09:40:06.810 に答える