选择ViewModels的方法是什么?

时间:2011-10-20 04:28:32

标签: c# asp.net asp.net-mvc asp.net-mvc-3

我正在使用带有asp.net MVC3的ViewModels。我很好奇的一件事是,假设我有一个名为Customers的实体,它有添加,编辑,删除屏幕。假设它们都有不同的属性要求。

例如。添加可能有地址字段,但编辑屏幕可能没有编辑屏幕,删除只能使用客户名称。

我的问题是,你如何为此创建ViewModels?你是否采用了添加,编辑和删除之间共享ViewModel的方法,即一个viewmodel类,它可以为你处理所有内容,或者你更喜欢创建viewmodels类/页面?

共享viewmodel的优点是它减少了开发时间,我们可以重用类。但是这个问题很大,如果你使用像Automapper这样的工具,你可能会期望不同屏幕的结果。

一个viewmodel / page的缺点是它增加了开发时间。我应该走哪条路?

4 个答案:

答案 0 :(得分:1)

这取决于情况。如果您对不同的屏幕(验证,要渲染的属性等)有类似的要求,则可以在不同的视图中使用viewmodel。如果存在一个或两个属性的差异,我仍然会使用相同的视图模型,并且在不需要这些属性的情况下,我会将它们放入隐藏的输入中,以便它们返回表单帖子而不允许不需要的结果。众所周知,隐藏字段可以调整,并由开发人员决定使用隐藏字段是否安全。但是,如果我对两个屏幕有不同的验证要求,那么我肯定要采用viewmodel / page方法。您可以根据要求混合使用这两种方法,因为他们说“没有最好的做事方式”

答案 1 :(得分:1)

答案 2 :(得分:1)

我查看模型的方法是使用共享视图模型,直到对视图的要求(传输的数据)不同。这意味着我正在使用共享视图模型,例如CreateAddress和EditAddress,以防传输到视图的所有数据都相同。如果需要在视图中显示其他字段,例如在CreateAddress视图中,我正在重构我的视图模型,并为CreateAddress和EditAddress使用不同的视图模型。

例如对于DeleteAddress,我从头开始使用一个独特的视图模型,因为我知道DeleteAddress视图中显示的数据几乎与Create / EditAddress中的数据不同。

另一种方法是使用动态视图模型,因为视图模型应该/不得实现业务逻辑并充当控制器和视图之间的DTO,这种方法有一些好处(不需要创建逻辑,丢弃DTO)。

答案 3 :(得分:1)

可以更改模型中存在的所有字段。它们是否隐藏无关紧要。用户所要做的就是检查您的页面并尝试找出模型中存在哪些字段。

然后他可以添加这些字段(例如使用Chrome Dev Tools)来对它们进行更改。

摆脱这个问题最安全的方法就是让模型只包含允许更改的字段。

也就是说,如果所有用户都允许更改模型中的所有字段,请继续使用相同的模型。 (并且根本不显示不应修改的字段)