我知道使用域模型作为视图模型可能很糟糕。如果我的域模型有一个名为 IsAdmin 的属性,并且我有一个创建控制器操作来创建用户,那么有人可以更改我的表单并使其 POST IsAdmin=true 表单值,即使我没有在视图中公开这样的文本字段。如果我使用模型绑定,那么当我提交域模型时,该人现在将成为管理员。因此,解决方案变成仅公开视图模型中所需的属性,并使用 AutoMapper 等工具将返回的视图模型对象的属性值映射到域模型对象的属性值。但我读到,类上的绑定属性可用于指示模型绑定器应该绑定哪些属性,不应该绑定哪些属性。那么,创建两个本质上代表同一事物的独立类(域模型和视图模型)并在映射它们时产生开销的真正原因是什么?这更多的是一个代码组织问题吗?如果是的话,我有什么好处?
EDIT
我遇到的视图模型与域模型分离的最重要原因之一是需要实现 MVVM 模式(基于 Martin Fowler 的 PM 模式)来管理复杂的 UI。
我发现,虽然我的领域模型可以 85% 地获得我想要的字段,但它从未覆盖我视图中我想要的值的 100%。特别是当涉及到权限以及用户是否应该有权访问视图的某些部分时。
我试图遵循的设计理念是在我的观点中尽可能少的逻辑。这意味着我的视图模型中有“CanViewThisField”或“CanEditThisField”等字段。当我第一次开始使用 MVC 时,我会让我的域模型成为我的视图模型,并且我总是遇到这样的情况:我只需要一两个以上的字段来使我的视图不那么混乱。我从此离开了查看模型/模型生成器 https://web.archive.org/web/20100722003334/http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx路线,它对我来说非常有效。我不再与我的代码作斗争,而是能够根据需要增强我的视图模型,而不会影响域模型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)