3

ASP.NETMVCビューでレイアウトを実行するためにロジックが必要になる状況をますます見つけています。これらのルーチンは、私のモデルにもコントローラーにもありません。私には3つの選択肢があります:

  1. ビューに多くの<%%>をインラインで書き込みます。
  2. いくつかの部分ビューに書き込む<%%>を少なくします。
  3. HtmlHelper拡張メソッドを記述します。

それは私を混乱させる最後のオプションです。ロジックがその1つのビューのみに固有である場合、これを実行しても大丈夫ですか?拡張機能は、他のすべてのビューのHtmlオブジェクトに「表示」され、必要になることはありません。

助言がありますか?

4

3 に答える 3

5

私は個人的にオプション3( "HtmlHelper Extensionメソッドを書く")を好みます。これらのコード本体はユニットテストが容易であるためです。

あなたが正しいので、拡張メソッドを内部クラスまたはネストされたクラスに配置できることを本当に望んでいます。1つのビューでのみ使用される大量の拡張メソッドで名前空間を汚染し始めます。

プロジェクト全体で使用できる拡張メソッドの数を制限するために、ビューで手動で参照するビューごとのカスタム名前空間の静的クラスでこれらのHtmlHelper拡張メソッドを隔離することをお勧めします。

于 2009-11-12T22:29:51.687 に答える
1

私は一般的に、部分ビューと拡張メソッドの両方を再利用可能なコンポーネントに制限しますが、それについては衒学的ではありません。どちらかがコードの可読性を向上させると思われる場合は、先に進んでそれらを使用してください。1セットのビューでのみ使用されるヘルパーメソッド用に別の名前空間/ヘルパークラスを検討することをお勧めします。これは、コントローラーごとにパーシャルを分離するようなものです。

また、読みやすさを向上させるために、(サイレントキラーであっても)空白を増やすことを検討することもできます。ダウンロード時間に対する空白の影響を制限するために、ベースコントローラーに出力圧縮を実装しました。

于 2009-11-12T22:30:38.293 に答える
0

ロジックがその1つのビューのみに固有である場合、これを実行しても大丈夫ですか?

はい。読む...

拡張機能は、他のすべてのビューのHtmlオブジェクトに「表示」され、必要になることはありません。

真実ではない。ビューの拡張メソッドをどのように登録するかによって異なります。これは、名前空間をweb.config名前空間セクション に追加した場合にのみ当てはまります。

単一のビューで拡張メソッドを使用する場合は、その名前空間を単一のビューにインポートするだけです。

<%@ Import Namespace="NamespaceOf.Your.ExtensionMethods.ForThisViewOnly"%>
于 2009-11-13T00:38:43.293 に答える