3

UI が ViewModel に強く型付けされている MVC 4 プロジェクトがあります。ビューには、特定のシナリオで表示する必要がある特定の要素があります。これらのシナリオはビジネス ロジックによって管理されるため、UI にこのような条件ステートメントを含めたくありません。

If (Role.Equals(“Admin”))
{
  <a href=””&gt; Admin Link here</a>
}

私が持っているのは、ビジネスレイヤーがビューモデルを作成することです。したがって、上記のステートメントは、以下のようにビジネスレイヤーにあります

If (Role.Equals(“Admin”))
{
 ViewModelClassObject.ShowAdminLinks = true;
}

そして、以下のように私のUI .aspxレイヤーで

If (model.ShowAdminLinks)
{
  <a href=””&gt; Admin Link here</a>
}

問題はこれです。ビューモデル クラスは別のクラス ライブラリにあり、ビジネス UI レイヤーと Web UI レイヤーの両方から参照されます。ビューモデル クラスには、必要なフィールド バリデーター、比較、範囲バリデーターなどのいくつかの検証を実行する UI レイヤーのテキスト ボックスにマップするプロパティもあるため、ViewModel クラスで System.web.mvc レイヤーへの参照を作成する必要があります。図書館。これは悪いコーディング方法ですか? コードはコンパイルおよびビルドされますが、おそらくコードのにおいがするようなことをしているような気がします。または、ViewModel クラスを Web UI レイヤーに戻し、Web プロジェクトである種のビューモデル ビルダーを使用して、ビジネス レイヤー メソッドを呼び出してビュー モデルを作成することも検討しています。

これについてどう思いますか?

4

1 に答える 1

2

Web プロジェクトで使用される ViewModel と、ビジネス レイヤーで使用される DTO を分離します。

ShowAdminLinksその理由は、おそらく、ビジネス層でプロパティやいくつかのドロップダウン値が必要ないからです。したがって、ビジネス層は、知る必要があるデータについてのみ知っています。

このようにして、きれいな多層アプリケーションを手に入れることができます。もちろん、DTO 値の作成と設定に関して、もう少しコーディングを行う必要があることを意味します。そのためにオートマッパーを使用する人もいますが、私は使用しないことを好みます。なんで?手動で行うのはそれほど難しくありませんが、魔法は必要ありません。

于 2013-05-29T12:41:11.980 に答える