将逻辑从View移动到Controller和ViewModel

时间:2013-01-25 04:44:46

标签: asp.net-mvc model-view-controller asp.net-mvc-4

我正在移动所有定义,如下所示:

 @(Model.Store.EmployeeType.Name == "Manager" ? Model.Store.HQ.Manager.DisplayName : Model.Store.Manager.DisplayName )

从我的视图中进入viewModel:

public class ManagerViewModel 
{
    public string Manager {get;set;}
}

在控制器中定义它们:

var viewModel = new ManagerViewModel();

viewModel.Manager = Model.Store.EmployeeType.Name == "Manager" ? Model.Store.HQ.Manager.DisplayName : Model.Store.Manager.DisplayName;

return View(viewModel);

现在,在我的视图中,我可以这样做:

@Model.Manager

我的问题是 - 这是否违反了瘦身控制器的最佳做法?我有大约30个需要这种处理的字段,因此我的控制器将会非常大 - 我正在为每个领域创建一个新属性。

1 个答案:

答案 0 :(得分:2)

不要过于担心premature optimization。我认为你在这里走的是正确的道路,不会过分担心它。

如果您真的担心“瘦”控制器,可以从构造函数中填充ViewModel。

public class ManagerViewModel 
{

    public ManagerViewModel(ManagerModel model){
        // initialize in here
        this.Manager = model.Store.EmployeeType.Name == "Manager" ? model.Store.HQ.Manager.DisplayName : model.Store.Manager.DisplayName;
    }

    public string Manager {get;set;}
}
var viewModel = new ManagerViewModel(model);
return View(viewModel);