6

C# でクリーンな分離コードを作成する利点として、動的パラメーターを使用してオブジェクトを構築することについてフィードバックを得たいと考えていました。通常、インターフェイスを作成し、そのインターフェイスをコントラクトとして使用すると思いますが、すべてのクラスのインターフェイスを作成する必要があり、ちょっと面倒だと思います...

だから、私の質問は、このようなことをすることの長所と短所は何ですか:

class Class1
{
    public string Description { get; set; }
    public string Name { get; set; }

    public Class1(dynamic obj)
    {
        Name = obj.Name;
        Description = obj.Description;
    }
}

class Class1
{
    public string Description { get; set; }
    public string Name { get; set; }

    public Class1(IClass1 obj)
    {
        Name = obj.Name;
        Description = obj.Description;
    }
}
4

2 に答える 2

8

インターフェースの長所:

  • コンパイラは、間違った種類の引数を使用しているかどうかを通知します
  • コンストラクターの署名は、パラメーターから何が必要かを示します

の長所dynamic

  • インターフェイスを宣言したり実装したりする必要はありません
  • NameプロパティとDescriptionプロパティを持つ既存のクラスは、変更なしで使用できます
  • 名前と説明のプロパティがある場合、匿名タイプを同じアセンブリ内で使用できます

個人的には、自然に動的なもの(たとえば、リフレクションを使用したり、COMまたはDLRを呼び出したりする場合)を操作しない限り、通常、静的に型指定された言語としてC#を使用します...しかし、場合によっては、これが可能であることがわかります。役に立つ。やりすぎないでください:)

于 2011-05-25T17:29:37.790 に答える
1

どちらのシナリオでも、メソッドが期待どおりに正しく機能するには、メソッドに渡されるオブジェクトに Name プロパティと Description プロパティが必要です。

私の懸念は、ダイナミックを使用するためのベストプラクティスは、追加のメソッドドキュメントを提供して、渡されるオブジェクトに存在しなければならない期待されるデータコントラクトを6か月後に確実に知る必要があることです。その場合、メソッドにエラー処理を記述して、その契約が破られたときに期待どおりに機能するようにする必要があります。

これらの潜在的な落とし穴はすべて、与えられた例では文字通りわずか5行の基本的なコードであり、手動で行うことを強制するすべてのことを行うインターフェースを書かないことの仮説上の利益よりも重要ですか.

よく文書化された読みやすいコードにつながるベストプラクティスに従いたいと仮定します。この目的のためにインターフェースを使用することに傾倒します。

于 2011-05-25T18:58:07.407 に答える