私は、ASP MVCで書かれたかなり簡単なデータ監査Webアプリケーションを持っています。HTMLヘルパーを使用してコードの複製を減らす
エージェントビュー - 情報の検証者が記入したフォーム。このビューのフォーム上の各フィールドには、サブフィールドが3つあります。
a。元の値 - 呼び出し前のデータベースからの値
b。新しい価値 - 元の人と異なる場合、人が電話で提供した価値。
c。アクション - 何が起こったかの一般的な表示
QCビュー - エージェントビューで実行された作業をレビューする人が入力したフォーム。このビューのフォームの各フィールドには、5つのサブフィールドがあります。
a。元の値 - 上記と同じ
b。エージェント値 - エージェントが上の1bで提供した値。
c。 QC値 - エージェントによって指定された値が正しくない場合、修正された「新しい値」。
d。エージェントアクション - 上記と同じですが、このビューでの読み取りのみを除きます。
e。 QCアクション - エージェントによって不適切に選択された場合、訂正された「新しいアクション」。
2つのビューの唯一の違いは、使用可能なサブフィールドです。私はページの全体的な構造が同一であり、HTMLフィールドヘルパーを使ってサブフィールドの違いを処理するので、両方のビューを表現するために単一のビューを使用できるようにしたい。私はこれまで持っています(現在はいえ分離することができ、同じクラスで)ヘルパーの2はっきりと別のシリーズ:フルネームのような第三の実装は、複数のデータで構成される、より複雑なフィールドを扱う
// Agent controls
public static MvcHtmlString AuditControl(this HtmlHelper htmlHelper, string id, string fieldLabel, MvcHtmlString editControl, string cssClass)
public static MvcHtmlString AuditControl(this HtmlHelper htmlHelper, string id, string fieldLabel, string editControl, string cssClass)
public static MvcHtmlString AuditControl<COMPLEX>(this HtmlHelper htmlHelper, string id, string fieldLabel, string cssClass) where COMPLEX : AbstractComplex, new()
// QC controls
public static MvcHtmlString ReviewControl(this HtmlHelper htmlHelper, string id, string fieldLabel, MvcHtmlString editControl, string cssClass)
public static MvcHtmlString ReviewControl(this HtmlHelper htmlHelper, string id, string fieldLabel, string editControl, string cssClass)
public static MvcHtmlString ReviewControl<COMPLEX>(this HtmlHelper htmlHelper, string id, string fieldLabel, string cssClass) where COMPLEX : AbstractComplex, new()
( 、アドレスなど)。
私が考えてきた解決策の1つは、さまざまな種類のコントロールを共通のインターフェイスを実装する異なるクラスに分けて、より一般的なHTMLヘルパーに型パラメーターとして渡すことです。私はこれがうまくいくと思いますが、どういうわけかViewを描画するためにどの実装を使うべきかをViewに伝える必要があります。ViewとControllerの間の線がぼやけているように見えます。
明白なような魅力的ではないアプローチの1つは、コントローラからの管理フラグを渡すことです。このフラグは、汎用(論理型ではないタイプの汎用)ファクトリヘルパーによって使用され、使用する方法。これはモデルとビューを別々に保ちますが、HTMLヘルパーは単なるHTMLの構築以上の責任を負うことになるので、汚いと感じます。
これは、MVCによって設計された懸念の分離を破るのに妥当な状況ですか、より適切な解決策がありますか?
あなたの解決策はあまりにも複雑に聞こえます。どのバージョンのASP.NET MVCを使用していますか? – SoWeLie
@ SoWeLie - MVC 3を使用しています。 –