我很好奇人們構建ViewModel的各種方式,以及他們爲什麼選擇這種方法。你如何填充/驗證你的ViewModels?
我可以在這裏想到幾種方法:
-1。注入庫 - 控制器將模型和映射加載到ViewModel。在這裏,ViewModel的構造函數可以採用各種集合來爲ex設置。在選擇列表中,例如:
public CustomerController(ISomeRepository repository)
{
_repository = repository;
}
public ActionResult Create()
{
CustomerCreateViewModel model = new CustomerCreateViewModel(_repository.GetShipTypes,
_repository.GetStates);
..
..
}
-2。 ViewModelBuilder - 在控制器中注入或實例化一個注入庫的實例。通過一些所謂的像
>var orderViewModel = orderViewModelBuilder.WithStates().Build(orderId);
,或者
var orderViewModel = orderViewModelBuilder.WithStates().Build(orderId);
-3。直接在控制器(無需代碼 - 其凌亂)
-4。返回域模型,控制器則映射或視圖模型的一些其他服務(注射或沒有)(任何人都這樣做,以返回未明確指定的視圖模型/注意到作爲一個視圖模型生成器類?)
public JobCreateViewModel BuildJobCreateViewModel(int parentId)
{
JobCreateViewModel model = new JobCreateViewModel();
model.JobStatus = _unitOfWork.JobRepository.GetJobStatuses();
model.States=_unitOfWork.StateRepository.GetAll();
return model;
}
現在在回程中 - 關於驗證視圖模型 - 您是從基礎ViewModel類繼承以進行標準驗證,還是在所有ViewModel之間複製驗證(例如數據註釋屬性),還是僅僅依靠服務器端驗證它可以全部通過你的域對象來驗證嗎?
其他?有什麼更好的?爲什麼?
編輯 根據下面的鏈接,我在Jimmy Bogard的ViewModels體系結構中找到了一篇不錯的文章。雖然它沒有直接解決上述問題,但它對於任何來這裏獲取ViewModel信息的人來說都是一個很好的參考。 http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/
這裏有一個downvote - 只是好奇爲什麼 - 我可以澄清的任何東西? –
在我的手機上,我試圖星星時無意中點擊了它 - 對不起。現在撤消已經太遲了。 – Jason
ah不用擔心的話:) –