0

C#とRazorにASP.NETMVC3があります。アプリケーションのアーキテクチャは、データアクセス層(EFクラス+リポジトリ)、サービス層、コントローラー、ViewModels、およびViewに分かれています。

My ViewModelは、ビューFillに表示するデータコレクションをパラメーターとして受け入れるメソッドを公開します。コンポーネント間の結合がないようにするには、メソッドをサービスレイヤーまたはコントローラーから呼び出す必要がありますか?Fill

4

2 に答える 2

2

定義:モデル(MVCの場合)=サービスレイヤー(この場合)

コントローラは、ビューとモデルの間の接着剤として共謀する必要があります。ビューはモデルを認識してはならず、その逆も同様です。

したがって、あなたの質問に対する答えは、コントローラーには、モデルからビューモデルに情報を移動するために使用されるすべてのロジックが含まれている必要があるということです。ビューモデル内でモデルの任意のクラスを使用することはまったく問題ありません。

コメントに答えて更新

私が言ったように。クラスがどのように見えるか、またはナビゲーションを生成するために何をしなければならないかはわかりません。

  1. ビューモデルに必要な情報を組み立てるには、コントローラーを使用する必要があります
  2. コントローラにはビジネスロジックがないはずです

つまり、これら2つの目標を達成するには、サービスレイヤーに新しいクラスを作成する必要がある場合があります。

于 2012-02-17T12:18:57.637 に答える
1

ViewModelからFill関数を削除すると、ViewModelがデータレイヤーに依存しなくなります。

次に、コントローラーでAutomapperのようなものを使用して、ビューを返す前にDataObjectをViewModelにマップします。

ActionMethod:

public ActionResult Edit(int id)
{
    var data = DataRepo.Get(id);
    var viewMode = Mapper.Map<ViewModel>(data);
    return View(viewModel);
}
于 2012-02-17T12:05:21.650 に答える