3

我进入 MVC 大约一个月,据我了解,应用程序架构的一个很好的方法是:

MVC <> 服务 <> 存储库 <> 核心

在 MVC 中,我们有视图和控制器来填充控制器的视图模型。我的问题是:数据传输对象到底是从哪里来的?我正在构建一个单页网络应用程序,并且我正试图从一开始就这样做。

根据我所做的阅读,我应该使用 DTO 来“扁平化”模型对象,然后再将它们传递给 ViewModel。它们是否充当从服务传递到控制器的“我需要的唯一数据”对象,此时视图模型被构造?如果是这样,那么每个模型定义(即 Sets、Cards、Users)是否应该在 Core 层具有相应的 DTO 类?这里的任何澄清都会很棒,感谢您的宝贵时间!

4

1 回答 1

4

首先,关于这句话:“一个非常好的应用程序架构方法是......”:我不相信所有应用程序都有一个好的方法,我更喜欢总是使用最简单的方法(即更少层)可以解决您手头的问题。

当您说“服务”时,它似乎是一整层 Web 服务,而不仅仅是一些域服务类;在我使用 Asp.Net MVC 看到的大多数情况下,控制器本身可以完成服务的角色,因此无需再添加一层。当然也有例外,只要确保你增加复杂性的理由是合法的。

关于 DTO 和视图模型:DTO 就像您所描述的那样,将对象模型展平并返回“仅我需要的数据”。DTO 是一个更通用的术语,通常用于您不知道谁是消费者的 Web 服务。将(Asp.Net MVC)视图模型视为一种更专业的 DTO,它返回“仅视图需要的数据”。因此,如果您不需要额外的服务层,也不需要额外的 DTO 层,只需使用视图模型直接展平域类并从控制器返回它们。

事实上,对于非常简单的应用程序,即使模型 x ViewModels 的分离也是多余的——在 ViewBag 的帮助下,可以使用单个模型层来完成这两个角色。我不知道你的要求,所以我不能说哪个更适合你。

最后,有一条评论:如果你必须构建一个单页应用程序,Asp.Net MVC 并不是最适合这项工作的工具。我建议在服务器上使用 Asp.Net Web Api(只有服务,没有视图)和客户端mvc 框架,例如 BackboneJs 或 AngularJs。

于 2013-02-28T03:58:21.147 回答