模型、视图模型和数据传输对象(DTO)之间有什么区别?

4

我是一名ASP.NET MVC开发者,我有些困惑。Model、ViewModel和DTO(数据传输对象)之间有什么区别?Model是否可以拥有自己保存到数据库的方法?


这不是编码的问题,而是编码概念的问题。 - Art Drozdov
在我看来,你的问题没有任何问题,因为我也有同样的疑惑。 - Mohit Shah
1个回答

15

DTO是在不同层之间进行通信时传递数据的对象。它是一种通用模式,与ASP.NET MVC无关。

ViewModel包含特定于特定视图的数据,由控制器传递到该视图,并在视图中用于呈现。这是一个特定于ASP.NET MVC的模式(不要将其与MVVM中的ViewModel混淆 - 它们是不同的)

Model是一组代表您业务领域的对象。它可以包含方法,根据您选择的构建模式将其保存到数据库中(类似于您的情况中的Active Record)。


谢谢!ViewModel 可以有类似 Init() 方法来从数据库检索初始数据吗? - Art Drozdov
我并不完全同意 - 在MVC和MVVM中,ViewModel本质上是相同的东西。你可能有不同的方法,而且从技术上讲,MVC是无状态的,所以你没有一个真正持久化的ViewModel,但你仍然在对特定功能区域的逻辑进行建模 - 这是相同的。我还想说,在同一个ViewModel上拥有多个视图是完全可能的(有时也是可取的) - 我知道你没有直接说这不是情况,但我只是想指出一下。 - Charleh
1
值得一提的是,MVC中的“Model”部分对不同的人有不同的含义。我总是使用ViewModel来包装实际的“Model”(通常是一个实体框架对象或存储库),所以对我来说它真的应该被称为VMMVC或类似的东西!根据复杂程度,模型可以是DTO或实体类(不好,但对于一些简单的视图来说效果很好)或类似的东西。显然,尽可能地构建项目结构是有意义的(通常层次越多越好),但这确实取决于项目的大小/范围/开发人员。 - Charleh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接