2010-04-08 97 views
5

我看到很多MVC示例,其中域对象直接传递到视图,如果您的视图很简单,这将工作得很好。asp.net MVC应该视图模型封装域模型?

常见的选择是拥有一个视图模型,它具有与您的视图模型+视图可能需要的任何额外属性(例如'confirmPassword')完全相同的属性。

在做太多的阅读和发现AutoMapper之前,我开始创建自己的视图模型变体,其中域对象(或多个域对象)只是视图模型的属性。

我做了坏事吗?这种方法会带来哪些问题或好处? 在什么情况下,这种做事方式可以正常工作?

+0

如果封装了Domain-Model,那么ViewModel的目的是什么 – Omu 2010-05-05 19:04:28

+0

主要原因是聚合多个域模型,例如:Product,Basket,Navigation等 – Myster 2010-05-05 20:50:55

回答

4

将域模型直接暴露给视图并没有什么固有的坏处。主要风险来自于暴露你不意味的属性,例如Employee对象上的薪水字段。如果您要返回JSON,请务必小心。

另一件需要注意的事情是,当你从编辑表单绑定回来时。您应该了解涉及的具体risks。基本上,恶意用户可以将字段添加到POST中,恰好匹配您不希望可编辑的字段。我总是绑定到传递到服务中的中间对象,然后将其映射回域。

+0

这只适用于作用域对象参数;把它们传递给视图没有什么不安全感。 – queen3 2010-04-08 11:34:53

+0

@queen有两个不同的问题。传出:通过JSON/XML /无论是暴露敏感字段。传入:恶意表单参数。 – Ryan 2010-04-08 21:43:32

+0

我记得有人提倡viewModel是作为回发的Action参数的SAME类型。看来这种方法意味着你必须完全分离你的域模型。 (除非它打算完全开放以进行修改) – Myster 2010-04-11 23:13:25

0

不好?无法使用Automapper。 ;)

好吗?没有什么可以想到的。

我不认为你做过任何可怕的事情。对你起作用吗?如果是这样,为什么不呢?