Asp.net-Mvc
ASP.NET MVC ViewModelBuilder 建議
對於無關緊要的視圖模型,我使用視圖模型建構器來處理生成視圖模型對象的職責。現在,我將建構器的建構子注入到我的控制器中,但這有點味道,因為建構器實際上取決於正在執行的操作方法。我有兩個想法。第一個將涉及自定義 ActionFilter 允許我使用適當的建構器來裝飾每個操作方法以使用。第二種方法是添加對接受泛型開放的 View 方法的覆蓋。
這就是我的程式碼目前的樣子。請注意,建構器是通過 ctor 注入的。
[HttpGet, ImportModelStateFromTempData, Compress] public ActionResult MyAccount() { return View(accountBuilder.Build()); }這是選項一的樣子:
[HttpGet, ImportModelStateFromTempData, Compress, ViewModelBuilder(typeof(IMyAccountViewModelBuilder)] public ActionResult MyAccount() { return View(); }或選項二:
[HttpGet, ImportModelStateFromTempData, Compress] public ActionResult MyAccount() { return View<IMyAccountViewModelBuilder>(); }任何想法或建議都會很棒!
建造者
我認為您可以將建構正確視圖模型的責任轉移給建構器。您可以將要建構的 ViewModel 類型作為參數傳遞,例如:
[HttpGet, ImportModelStateFromTempData, Compress] public ActionResult MyAccount() { return View( AccountBuilder.Build<MyAccountViewModel>( ) ); }關於候選人
FirstOptionThis
上述方法允許您在將在動作中呈現的視圖中具有更大的靈活性(如果您的控制器應該在 3 個視圖之間進行選擇,並且每個視圖都有不同的視圖模型,會發生什麼?過濾器解決方案開始變得複雜。)
第二選項
View 方法的職責是獲取模型並使用它渲染視圖。建立模型是控制器的責任。所以有點正統,我建議避免將模型建構邏輯放在 View 方法中:)。