14

C# では、どの型を作成するか、どのようなメンバーが必要か、どの名前空間がそれらを保持する必要があるかという問題は、OO 設計の問題です。それらは私がここで興味を持っている質問ではありません。

代わりに、これらをディスク アーティファクトにどのように保存するかお聞きしたいと思います。ルールの例を次に示します。

  • アセンブリのすべての型を 1 つのソース ファイルに入れます。これを行った友人の 1 人は、「ファイルは古風なコード整理ツールです。現在、クラスビューと定義の縮小を使用してコードを参照しています」と述べています。

  • すべてのコードを 1 つのアセンブリに入れます。展開とバージョン管理がより簡単になります。

  • ディレクトリ構造はネームスペース構造を反映しています。

  • 各名前空間は独自のアセンブリを取得します。

  • 各タイプは独自のアセンブリに入ります。(極端な例として記載しています。)

  • 各タイプは独自のソース ファイルを取得します。

  • 各メンバーは独自のファイルを取得します。各タイプは独自のディレクトリを取得します。(極端な例として記載しています。)

4

8 に答える 8

17

何をするにしても、一貫してやってください。答えは 1 つではないと思います (ただし、間違った答えもいくつかあります)。ただし、後継者が物事を簡単に見つけるための鍵となるため、フォームに忠実であることを確認してください.

于 2008-12-01T22:01:52.803 に答える
6

現在私は:

  • 本番コード + 単体テスト用の 1 つのアセンブリ
  • ディレクトリ構造は名前空間を模倣する
  • ファイルごとに 1 つのタイプ
    • ネストされた型は、型を使用して独自のファイルを取得しpartialます。あれは:


// ------ C.cs

public partial class C : IFoo
{
    // ...
}

// ------ C.Nested.cs
partial class C
{
    public class Nested
    {
        // ...
    }
}
于 2008-12-01T21:52:42.383 に答える
3

私も全く同じようにやっています。私が違う点:

  • ファイルごとに 1 つのタイプ

デリゲート型を必要な場所で宣言します。つまり、独自のファイルではなく、それらを使用するクラスで宣言します。

于 2008-12-01T22:04:04.500 に答える
3

アーキテクチャ レイヤーごとに 1 つのアセンブリを作成します。(WinUI.exe、BusinessWorkflow.dll、BusinessComponent.dll など。

次に、クラスごとに 1 つの物理ファイル。

それが「垂直」です。

名前空間は、概念的には水平方向に進み、ドメイン レベルの機能をまとめてグループ化します。たとえば、注文は「Accounting.AccountsPayable」に入れられます。

各アセンブリはその下にあるアセンブリのみを参照するため、アーキテクチャ上、インテリセンスはドメイン モデル内の関連する参照によって適切に制約されます。

(ただし、上記に同意する必要があります - 一貫性が不可欠です。

于 2008-12-01T22:33:16.313 に答える
1

クラスが 12 個未満の小さなプロジェクトの場合は、ファイルごとに 1 つのクラスのみです。

エンタープライズ プロジェクトの場合、ソリューションに複数のプロジェクトがあります。これらは、目的 (ビジネス クラス、インターフェース、UI) ごとにグループ化されています。各クラスには独自のファイルがあります。

于 2008-12-01T22:05:38.973 に答える
1

型がどんなに小さくても、各型を別のファイルに入れます - 例外: ネストされたクラスとデリゲート

ところで、ネストされた型を独自のファイルに配置するためだけに部分クラスを使用して分離するのは、やり過ぎのように思えます。部分クラスは慎重に使用し、通常はファイル生成ツールに使用する必要があります。ネストされたクラスの部分クラスに「名前を付ける」方法を検討する必要があります。物理的にネストされたファイルの直感的な名前を考え出すのは面倒な場合があり、簡単な作業ではありません。

プロジェクトの場合、名前空間を反映するようにプロジェクトに名前を付けます - 例外: ネストされた名前空間が大きくなると、ネストされたフォルダーを別のプロジェクトに移行します。

于 2008-12-02T03:50:16.500 に答える
0

ソリューション エクスプローラー ビューを管理しやすくするために、必要に応じて概念的に関連するクラスをグループ化するために使用される、プロジェクト内のフォルダー (サブディレクトリにマップされる) を使用する、従来のパブリック クラスごとに 1 つのファイルを好みます。クラス名が適切に選択されている場合、フォルダーは厳密には必要ありませんが、プロジェクトに多くのクラスがある場合に役立ちます。

ネストされた型に個別のファイルを使用することは、少なくともネストされたクラスが比較的単純な「ヘルパー」クラスである場合、特にそれらがプライベートである場合には、やり過ぎのように思えます。

あなたの友人の「すべてを 1 つの巨大なファイルに収める」方式に対する主な実際的な反論は、非常に長いコード ファイルを処理しようとすると、Visual Studio が非常に遅くなる傾向があるということです。

于 2008-12-01T22:09:07.873 に答える
0

私はどの言語でもこの種の組織を好みます。

独自のファイル内の関連する小さなクラス。

独自のファイル内の大きなクラス。

個別のサブプロジェクトのディレクトリ。

于 2008-12-01T22:15:49.513 に答える