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结构?的主要内容,如果未能解决你的问题,请参考以下文章