首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MVC:数据模型和视图模型

MVC:数据模型和视图模型
EN

Stack Overflow用户
提问于 2009-01-24 00:00:10
回答 7查看 12.1K关注 0票数 49

我在过去读过一些关于模型的MVC建议,指出您不应该对域和视图重用相同的模型对象;但我找不到任何人愿意讨论为什么这是不好的。

我的观点是创建两个单独的模型-一个用于域,一个用于视图-然后在它们之间进行映射,这会产生大量的重复,加上冗长的映射代码(其中一些可能会通过AutoMapper之类的东西来缓解),这很容易出错。

是什么使得为这两个关注点建立单独的模型值得为重复和映射代码而烦恼?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-01-24 01:23:13

在其核心,有两个模型是关于关注点分离的。我希望我的视图在单个模型上工作。我希望我的领域模型代表我与领域专家一起构建的概念模型。ViewModel通常有技术上的限制。域模型是关于POCO的,并且不受数据显示(视图)或持久化(在数据库中或其他方面)的技术约束。

假设我在一个屏幕上显示了三个实体。这是否意味着我需要在三者之间建立一种关系?或者只创建一个包含所有三个项的ViewModel组件对象。有了单独的ViewModel,视图关注点就从我的领域中分离出来了。

票数 47
EN

Stack Overflow用户

发布于 2009-01-24 01:42:54

为什么?因为视图不应该有使用模型对象的能力!

想象一下,你把项目交给一个网页设计师来做视图层。突然之间,他/她就有了通过模型层处理应用程序数据的能力。这可不妙。

因此,始终只传递视图所需的数据,而不是带有方法的对象。

票数 7
EN

Stack Overflow用户

发布于 2009-01-24 00:46:39

J.P.Boodhoo的文章Screen Bound DTOs将帮助你理解设计的好处。

还有一个我写过的security benefit

拥有一个表示模型可以简化视图。这一点尤其重要,因为视图通常很难测试。通过使用表示模型,您可以将大量工作移出视图并放入域>表示模型中。比如格式化,处理空值和扁平化对象图。

我同意额外的映射是一种痛苦,但我认为您可能需要在您的特定上下文中尝试这两种方法,看看哪种方法最适合您。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/475129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档