Spring中Web应用程序的MVC结构?

Posted

技术标签:

【中文标题】Spring中Web应用程序的MVC结构?【英文标题】:MVC Structure for Web application in Spring? 【发布时间】:2015-10-24 00:10:01 【问题描述】:

使用 Spring MVC 开发 Web 应用程序。之前我使用的是Controller层、Service层(业务逻辑)、Model层(实体)和DAO(DB)层。

但是有人指出我应该再引入两层,即。 dto 层用于从前端收集数据并转换层,该层将比 dto 转换为模型(实体)层对象。

现在我正在使用:

    控制器层(将数据发送到 DTO 层) DTO 层(将其数据发送到转换层) 变换层(用于将dto层对象转换为实体层对象) 服务层(业务逻辑) 实体层(将与数据库映射的POJO) DAO(将使用实体对象来存储数据库)

通过这种方式,我们可以保持前端和后端数据的不同。请帮帮我,这是 Spring MVC 的正确结构吗?

【问题讨论】:

DTO 不是层。有人给你指出了错误的方向。 @RomanC 因此,对于表单支持对象,我应该使用哪个层,如果它的实体层,那么我再次使用实体层将数据存储在数据库中。你能再解释一下吗? 它被称为视图层,您可以使用从后端返回的对象。我不知道它与视图和模型双向通信的 MVC 有什么关系,但它用于最新的 MVVM 和 MVW 架构。 @RomanC 所以我们的项目中不需要像 DTO 这样的东西?我们可以简单地使用实体从前端收集数据吗?并且前端和数据库都将使用实体来实现其目的 @blackOcean 什么样的实体?你的意思是ORM实体吗?你可以使用任何你需要的实体和 DTO,但一切都应该在它自己的层上烘焙。我刚刚指出你的理解层是不正确的。 【参考方案1】:

这里有一个关于 MVC 的有趣问答线程:https://softwareengineering.stackexchange.com/questions/127624/what-is-mvc-really

在设计应用程序时要记住的一些关键点应该是;分层和松耦合。

在您的场景中,拥有额外的转换层并不一定会让我们打破 MVC 模式。它只是您在 MVC 中引入的附加层;许多人遵循的设计策略。

【讨论】:

【参考方案2】:

DTO 只是一种封装数据的模式。通常用于在您的控制器中返回,但您不需要总是创建 DTO,您可以为此使用您的实体。当我需要不同的数据结构时,我只使用 Dto,任何实体都支持,例如报告。

关于你的项目层 Model/Dao/Service/Controller 没错,我强烈推荐你Domain-driven design这本书,它将帮助你构建你的软件架构!

【讨论】:

【参考方案3】:

但是有人指出我应该再引入两层,即。 dto 层用于从前端收集数据并转换层,该层将比 dto 转换为模型(实体)层对象。

不,这是不正确的。您应该只使用必要的层。

之前我使用的是 Controller 层、Service 层(业务逻辑)、Model 层(实体)和 DAO(DB) 层。

这也是不正确的。 MVC 是一种模式并没有严格的定义,但它仅用于一个称为视图层 的层,或者换句话说表示层。模型、视图和控制器所在的位置。还有另一层称为服务层,它是可选的。然后持久层,在这一层中,您对对象进行建模并将它们保存在数据库或其他地方。简单的 Web 应用程序不需要更多的层。

关于模型的几句话,它是一组类,您希望在视图层中持久化或使用它们来显示/存储数据。在这里您可以使用它,因为有人更喜欢使用它自己的模型来显示/存储数据,而其他人更喜欢他们自己的模型来持久化它。这些转换通常在持久性或服务中完成,或在两个层中完成。请记住,所有层彼此松散耦合,但您可以毫无问题地将数据 bean 从一层传输到另一层并返回。处于分离状态的实体或其他 bean(如 DTO)是此类对象的示例,您可以在层之间传递和烘焙。并且不需要额外的层。

【讨论】:

以上是关于Spring中Web应用程序的MVC结构?的主要内容,如果未能解决你的问题,请参考以下文章

[转] 使用Spring MVC构建REST风格WEB应用

Spring Web源码之MVC主体结构

Spring Web源码之MVC主体结构

Spring Web源码之MVC主体结构

Spring MVC XML 的配置

Spring开发框架知识篇Spring MVC总结