简单内容与表单填充视图模型的分离

时间:2014-09-18 06:28:19

标签: c# asp.net-mvc

我正在尝试在实现根据简单显示数据填充表单的视图模型时找出最佳方向。

这将在网站,Facebook应用,iframe中共享,并且会有不同的视图以适应布局。

用于显示帐单邮寄地址信息的简单视图模型示例。

public class BillingAddressVm
{
    public string Name;
    public string Address;
    public string CountryName;
}

用于填充帐单邮寄地址表单的表单视图模型示例。

public class BillingAddressFormVm
{
    public string Name;
    public string Address;
    public int CountryId;
    public List<Country> Countries;
}

将这些几乎相同的视图模型分开是否更好或者我应该将它们组合在一起,而不是像List<Country>那样填充模型的各个部分?如果命名约定发生变化,最好将它保持为一个吗?

1 个答案:

答案 0 :(得分:0)

我认为这取决于几个方面,但主要是:您经常使用表单视图吗?

如果您不经常使用某个特定视图,则可能不值得花时间和精力为视图添加其他属性(所有这些都是为了保持一致)。您只需在ViewBag中设置填充属性即可。无论哪种方式,您仍然需要从某个地方获取数据并将其存储在另一个地方。

另一个问题是语义。在您的特定示例中,在对象中包含引用该列表中的一个元素的完整国家列表是没有意义的。

我看到添加这样一个属性的唯一有力的理由是在视图中拥有完整的Intellisense支持。最后,这可能仅仅是个人偏好的问题。

编辑:
我现在才注意到你问题的最后两句话。我绝对不会使用两个单独的模型(类),因为我需要携带一些数据。这只是重复现有代码,并没有带来任何具体的改进。而且,它引入了开销。我假设数据来自数据库,并且它被加载到业务对象BillingAddressVm中;之后,您需要在新的BillingAddressFormVm中复制此对象,只是为了拥有一个容器来存储国家/地区列表。您已经拥有了这样一个容器ViewBag,使用它就不必复制您的业务对象。