C#とRazorにASP.NETMVC3があります。アプリケーションのアーキテクチャは、データアクセス層(EFクラス+リポジトリ)、サービス層、コントローラー、ViewModels、およびViewに分かれています。
My ViewModelは、ビューFill
に表示するデータコレクションをパラメーターとして受け入れるメソッドを公開します。コンポーネント間の結合がないようにするには、メソッドをサービスレイヤーまたはコントローラーから呼び出す必要がありますか?Fill
C#とRazorにASP.NETMVC3があります。アプリケーションのアーキテクチャは、データアクセス層(EFクラス+リポジトリ)、サービス層、コントローラー、ViewModels、およびViewに分かれています。
My ViewModelは、ビューFill
に表示するデータコレクションをパラメーターとして受け入れるメソッドを公開します。コンポーネント間の結合がないようにするには、メソッドをサービスレイヤーまたはコントローラーから呼び出す必要がありますか?Fill
定義:モデル(MVCの場合)=サービスレイヤー(この場合)
コントローラは、ビューとモデルの間の接着剤として共謀する必要があります。ビューはモデルを認識してはならず、その逆も同様です。
したがって、あなたの質問に対する答えは、コントローラーには、モデルからビューモデルに情報を移動するために使用されるすべてのロジックが含まれている必要があるということです。ビューモデル内でモデルの任意のクラスを使用することはまったく問題ありません。
コメントに答えて更新
私が言ったように。クラスがどのように見えるか、またはナビゲーションを生成するために何をしなければならないかはわかりません。
つまり、これら2つの目標を達成するには、サービスレイヤーに新しいクラスを作成する必要がある場合があります。
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);
}