【发布时间】:2016-01-22 16:13:01
【问题描述】:
那么,让我们看一个例子。我有一个看起来像这样的客户视图模型:
public class CustomerViewModel {
public string Name {get; set;}
public int CustomerTypeId {get; set;}
}
在 UI 上需要有一个客户类型的下拉列表。为了填充它,需要到业务层或数据层获取此客户类型列表。
在我看来,这个逻辑并不真正属于 CustomerViewModel,因为它不是真正的客户数据;只有 CustomerTypeId 是。所以我的问题是,一般来说(不一定在 .net MVC 中,而是 MVC 视图模型概念的一般实践)人们将这些数据访问放在哪里?
是否可以在视图模型本身中有一个名为 GetCustomerTypes() 的函数?
public class CustomerViewModel {
public string Name {get; set;}
public int CustomerTypeId {get; set;}
public List<CustomerType> GetCustomerTypes() { ... }
}
我应该在业务层或助手中创建一个类/方法并在视图中手动导入代码以访问此功能吗?在我看来,这将是使视图混乱且不属于那里的代码。
@{
using My.App.CustomerTypeHelper;
var helper = new CustomerTypeHelper();
var customerTypes = helper.GetCustomerTypes();
}
...
@Html.DropDownFor(x => x.CustomerTypeId, customerTypes)
全局 Html 帮助器在 .Net 中稍微缓解了这个问题,但我正在寻找一个概念上更全局的解决方案,我也可以将其应用于 PHP 代码等。 PHP 没有能力干净地拥有一个静态类,该类可以通过扩展方法分成小的有组织的单元。所以任何全局助手都可能变得又大又丑。
【问题讨论】:
标签: asp.net-mvc model-view-controller viewmodel organization