ASP.NET MVCでは、ビューモデルではどこで作業する必要がありますか?viewmodelsはasp.net mvcで作成/操作する必要がありますか?
これはコントローラで厳密に行う必要がありますか?または、リポジトリメソッドからビューモデルを返すといいでしょうか?
ASP.NET MVCでは、ビューモデルではどこで作業する必要がありますか?viewmodelsはasp.net mvcで作成/操作する必要がありますか?
これはコントローラで厳密に行う必要がありますか?または、リポジトリメソッドからビューモデルを返すといいでしょうか?
私の考えでは、ビューモデルはどのアプリケーションでも使用されますが、リポジトリはすべてのアプリケーションに共通のモデルを返します。ですから、リポジトリとビューのレイアウト方法を理解するのではなく、リポジトリから返された共通モデルからWebサイト内にビューモデルを作成する必要があります。
厳密にドメインが
リポジトリオブジェクトを返す必要があり、あなたのリポジトリ話す:「ドメインオブジェクトにアクセスするためのコレクションのようなインタフェースを使用して、ドメインとデータマッピング・レイヤー間を仲介します」
ファウラー(PoEAA)
リポジトリには、自分のドメインとUIの間であるべきである - リポジトリは、あなたのUI層について何も知らないはずです - あなたは、可能な限りそれから最高の再利用とデカップリングを得ることができます。
ViewModelは、コントローラでインスタンス化し、強く型付けされたビューに渡す必要があります。通常、ViewModelには、ビューをレンダリングするのに必要な複数のモデルタイプが含まれます。ここで使用例があります:
は、2つのモデルはあなたがページの最上部とその顧客のためのIndexビューにおける受注のグリッドで顧客の詳細を表示する受注および顧客
オブジェクトがあるとします。
public class CustomerModel
{
//properties
}
public class OrderModel
{
//properties
}
public class CustomerVM
{
public CustomerModel customer { get; set; }
public IEnumerable<OrderModel> orders { get; set; }
}
//and in your controller
public class CustomerController : Controller
{
public ActionResult Index(int id)
{
CustomerVM vm = new CustomerVM();
vm.customer = CustomerRepository.GetCustomer(id);
vm.orders = OrdersRepository.GetOrdersForCustomer(id);
return View(vm);
}
}
2つのアプリケーションが同じViewModelを使用できる場合はどうなりますか? VM用の専用プロジェクトを作成しますか? – heltonbiker