ena*_*rik 26 model modelbinders viewmodel asp.net-mvc-3
我知道将域模型用作视图模型可能会很糟糕.如果我的域模型有一个名为IsAdmin的属性并且我有一个Create控制器操作来创建用户,那么即使我没有在我的视图中公开这样的文本字段,也有人可以改变我的表单并使其发布一个IsAdmin = true表单值. .如果我正在使用模型绑定,那么当我提交我的域模型时,该人现在将成为管理员.因此,解决方案只是在视图模型中公开我需要的属性,并使用AutoMapper之类的工具将我返回的视图模型对象的属性值映射到我的域模型对象的属性值.但是我读到类上的bind属性可以用来指示Model Binder它应该和不应该绑定哪些属性.那么究竟是什么原因使得两个独立的类(领域模型和视图模型)必须代表相同的东西,然后在映射它们时增加开销呢?这是一个代码组织问题,如果是这样,我如何受益?
编辑
我遇到的与域模型分离的视图模型的最重要原因之一是需要实现MVVM模式(基于Martin Fowler的PM模式)来管理复杂的UI.
Nic*_*ore 20
我发现虽然我的域模型让我拥有了85%的拥有我想要的字段的方式,但它从未覆盖我想要的100%的值.特别是在涉及权限以及用户是否应该访问视图的某些部分时.
我试图遵循的设计理念是在我的观点中尽可能少地使用逻辑.这意味着我的视图模型中有字段,如"CanViewThisField"或"CanEditThisField".当我第一次开始使用MVC时,我会将我的域模型作为我的视图模型,并且我总是遇到我只需要一两个字段的场景,以使我的视图不那么杂乱.我已经离开了View Model/Model Builder路线,它对我来说非常有效.我不再对我的代码进行战斗,但能够在不影响域模型的情况下增强我的视图模型.
And*_*nea 16
拥有ViewModel的另一个好理由是分页大量数据.您可以将视图传递给Person(Person[])数组,但是元数据(例如页数,当前页面的数量,页面的大小)不属于Person该类.
因此PersonListViewModel将解决此问题.