我看到很多MVC示例,其中域对象直接传递到视图,如果您的视图很简单,这将工作得很好。asp.net MVC应该视图模型封装域模型?
常见的选择是拥有一个视图模型,它具有与您的视图模型+视图可能需要的任何额外属性(例如'confirmPassword')完全相同的属性。
在做太多的阅读和发现AutoMapper之前,我开始创建自己的视图模型变体,其中域对象(或多个域对象)只是视图模型的属性。
我做了坏事吗?这种方法会带来哪些问题或好处? 在什么情况下,这种做事方式可以正常工作?
我看到很多MVC示例,其中域对象直接传递到视图,如果您的视图很简单,这将工作得很好。asp.net MVC应该视图模型封装域模型?
常见的选择是拥有一个视图模型,它具有与您的视图模型+视图可能需要的任何额外属性(例如'confirmPassword')完全相同的属性。
在做太多的阅读和发现AutoMapper之前,我开始创建自己的视图模型变体,其中域对象(或多个域对象)只是视图模型的属性。
我做了坏事吗?这种方法会带来哪些问题或好处? 在什么情况下,这种做事方式可以正常工作?
将域模型直接暴露给视图并没有什么固有的坏处。主要风险来自于暴露你不意味的属性,例如Employee对象上的薪水字段。如果您要返回JSON,请务必小心。
另一件需要注意的事情是,当你从编辑表单绑定回来时。您应该了解涉及的具体risks。基本上,恶意用户可以将字段添加到POST中,恰好匹配您不希望可编辑的字段。我总是绑定到传递到服务中的中间对象,然后将其映射回域。
不好?无法使用Automapper。 ;)
好吗?没有什么可以想到的。
我不认为你做过任何可怕的事情。对你起作用吗?如果是这样,为什么不呢?
如果封装了Domain-Model,那么ViewModel的目的是什么 – Omu 2010-05-05 19:04:28
主要原因是聚合多个域模型,例如:Product,Basket,Navigation等 – Myster 2010-05-05 20:50:55