asp.net MVC 应该用视图模型封装域模型吗?

发布于 2024-08-27 17:26:57 字数 260 浏览 5 评论 0原文

我见过很多 MVC 示例,其中域对象直接传递给视图,如果您的视图很简单,这会很好地工作。

常见的替代方案是拥有一个视图模型,该视图模型具有与域模型相同的所有属性以及视图可能需要的任何额外属性(例如“confirmPassword”)。

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

我是不是做了坏事?这种方法可以带来什么问题或好处? 在什么情况下这种做事方式可以发挥良好作用?

I've see a lot of MVC examples where domain-objects are passed directly to views, this will work fine if your view is simple.

The common alternative is to have a view-model which has all the same properties as your domain-model + any extra properties your view may need (such as 'confirmPassword').

Before doing too much reading and before discovering AutoMapper I started creating my own variant of view-model where the domain-object (or multiple domain objects) are simply properties of the view-model.

Have I done a bad thing? What problems or benefits could be derived from this approach?
Under what circumstances might this way of doing things work well?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

葬シ愛 2024-09-03 17:26:57

将域模型直接暴露给视图本身并没有什么坏处。主要风险来自于暴露您无意的属性,例如 Employee 对象上的薪资字段。如果您返回 JSON,请务必注意这一点。

另一件需要注意的事情是当您从编辑表单绑定回来时。您应该了解特定的 所涉及的风险。基本上,恶意用户可能会将字段添加到 POST 中,而这些字段恰好与您不想编辑的字段相匹配。我总是绑定到一个中间对象,该对象在将其映射回域之前传递到服务中。

There's nothing inherently bad about exposing your domain model directly to the view. The primary risk comes from exposing a property you didn't mean to, like a salary field on an Employee object. Be sure to watch out for this if you're returning JSON.

Another thing to watch out for is when you're binding back from an edit form. You should be aware about the specific risks that are involved. Basically a malicious user could add fields to the POST that happen to match fields that you didn't mean to be editable. I always bind to an intermediary object which is passed into a service before mapping it back to the domain.

漫漫岁月 2024-09-03 17:26:57

坏的?无法使用自动映射器。 ;)

好的?什么也没有想到。

我不认为你做过什么可怕的事情。它对你有用吗?如果是这样那为什么不呢?

Bad? Can't use Automapper. ;)

Good? Nothing comes to mind.

I don't think you've done anything horrible. Does it work for you? If so then why not?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文