ASP.NET MVC视图模型的最佳实践

5

我在想如何正确地创建视图模型。

比如,我有一个编辑视图,其中包含一些文本框和下拉列表。

我应该将下拉列表分成一个新的视图模型还是在编辑视图中使用一个带有下拉列表的列表视图模型?

或者一般来说,我应该将特殊输入字段分别放在不同的视图模型中吗?

何时一个视图应该有多个视图模型,何时不应该?

4个回答

6
没有明确的规则来正确创建和组织您的视图模型。由于提供的上下文太少,您的问题过于模糊,无法回答。
我通常根据屏幕中它们所代表的功能块/部分对视图模型进行分组。例如,想象一下你有一个由多个部分/字段集合组成的复杂表单,如联系人详细信息、交货地址、账单信息等。地址可以由街道、邮政编码、城市和国家下拉列表组成。我会创建一个地址视图模型,包含这四个属性,以便在多个视图/局部视图中重复使用。这也会使验证更容易,因为相关属性将被打包到同一个视图模型中,例如验证给定的邮政编码是否对应于城市,并且该城市属于所选国家。
例如,我有一个编辑视图,其中包含一些文本框和下拉列表。如果这些字段在某种程度上具有功能关联,则不应将下拉列表分离为新的视图模型,而应将其放入具有下拉列表的视图模型中。
结论:您需要找到在屏幕上每个字段拥有一个视图模型和每个应用程序只有一个视图模型之间的正确平衡点。

关于创建可重用的子视图模型,你提到了什么 - 如果您更改了地址视图模型,因为您需要修改它仅适用于一个特定视图 - 更改将影响使用地址视图模型的其他视图,即使您只打算更改一个视图? - BornToCode

1

我倾向于每个视图/局部视图使用一个视图模型的方法。在我看来,如果你认为视图模型的单一目的应该是建模视图,那么这是最好的方法。这种范例还支持使用强类型视图,因此为您的视图模型绑定提供编译时错误检查,并获得智能感知的附加好处。在希望重用某些逻辑的情况下,我发现将视图重构为局部视图并为这些局部视图提供自己的视图模型通常可以满足要求。需要强调的是,您的视图模型中不应存在任何领域逻辑,因为它真正属于领域模型。


0

如果你想要可重用性,你应该将下拉列表分离到新的视图模型中。


0

我浏览了一下这篇文章,我想知道为什么有一个Model目录和一个ViewModel目录?Model目录是用于视图模型的。所提到的Model目录看起来像是领域模型/对象模型。所以他们所做的就是创建一个包含两个领域对象的视图模型。 - Rookian
@Rookian。是的,你说得对。ViewModel 用于 ViewModel,而 Model 用于领域/业务模型。 - Bikal Lem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接