0

asp.net で MVP パターンを実装していますが、Web 上の多くの例と混同しています。

get; として実装されている IEnumerable が表示されます。設定どおりの場合もあります。また、他のシナリオでは、メソッド void SetCategories(IEnumerable categories); が表示されます。

私の質問は、View (ex:IView) のコントラクトに関するものです。これは、カテゴリ IEnumerable カテゴリのリストを表示します

1)いつ実装する必要がありますかvoid SetCategories(IEnumerable<Category> categories);


2) いつ実装すべきかIEnumerable<Category> Categories { get; set; }


3) いつ実装すべきかIEnumerable<Category> Categories { set; }

4

1 に答える 1

0

1と3は非常によく似ており、カテゴリへの書き込み専用アクセスを提供します。プレゼンターがCategoriesコレクションを読む必要がない場合は、1または3を使用する必要があります。

どれ?このコード分析ルールがここに適用される場合があります。

コレクションを置き換えることが目標である場合、推奨されるデザインパターンは、コレクションからすべての要素を削除するメソッドと、コレクションを再作成するメソッドを含めることです。

ただし、MVPでは、メソッドよりもプロパティを使用する方が一般的です(これが、3つのシナリオすべての例を見た理由です)。したがって、これは実際には好ましいスタイルの問題です。

オプション2は、上記のすべてと、プロパティへの読み取りアクセスを提供します。プレゼンターがコレクションを調べてコレクションから値(またはすべての値)を読み取る必要がある場合は、これが必要です。ここでの好ましいパターンは、コレクション全体を読み取り専用状態にするか、選択したカテゴリを取得するためのプロパティだと思います。シングルCategory

  • 読み取りおよび書き込みアクセスが必要な場合、オプション2は機能しますが、fxCopを不快にさせます。

  • 書き込みアクセスのみが必要な場合は、オプション1でfxCopを使用してください

于 2012-06-13T00:12:56.007 に答える