控制器属于Presentation层?

我听说控制器属于表示层。 这怎么可能?

我以为 :

  • 视图用于演示
  • 模型用于业务逻辑
  • 控制器用于控制逻辑

是否有良好的链接来certificate控制器属于表示层?

“Spring MVC用于表示层”:我们如何才能在表示层中使用MVC?

表示层包含视图控制器。
您不能将MVC架构误认为是多层/层架构(尤其是3层架构)。 大多数情况下,模型/视图/控制器不是Web应用程序的主要设计,它只是多层/层架构的一个子集。

看看这个过于简化的方案(您可以在专用的数据访问层中使用DAO,但这在本文中并不重要):

简化图层

Spring MVC是一个表示框架 :它处理控制器和视图。 但为什么Spring MVC中的“M”呢? 仅仅因为,与许多其他表示框架一样,它自然地处理模型/实体(“M”)的表示。 此表示forms是在控制器中使用的表示forms,在视图中显示,在表单中提交等。 这就是为什么框架称为Spring MVC,即使模型/实体不是表示层的一部分。

我认为这是这个框架的一个好名字,因为它实际上是“MVC”导向的。 实际上,模型/实体的表示可以是:

  • direct:框架直接处理模型/实体对象
  • 间接:框架处理表单对象或DTO,其中包含与一个或多个实体相关的信息

Spring的建议是直接使用模型/实体(“M”)对象:

可重复使用的业务代码,无需重复。 将现有业务对象用作命令或表单对象,而不是镜像它们以扩展特定的框架基类。

这就是为什么我说这个框架非常“面向MVC”,与其他人一样,比如Struts,你必须使用不同的表单对象。

一些有趣的链接:

  • 来自维基百科的Multitier和MVC架构之间的比较
  • 这篇博客文章介绍了ASP.NET中的3层架构
  • 此博客形象为3层架构
  • Spring的文档中的DispatcherServlet章节

控制器控制rpesentation层逻辑。 对于所有业务代码,事务用例,持久性等,它通常委托给服务层。

一种典型的方法是将事务服务实现为spring bean,并将这些spring bean注入控制器中。 典型用例:创建新产品:

  1. 控制器从浏览器接收命令bean
  2. 它validation是否存在所有必需的数据,如果不存在,则重新显示产品创建页面并显示错误消息
  3. 它调用服务bean来创建产品
  4. 服务bean在事务中运行。 它从数据库中获取产品类别,将产品附加到其类别,根据当前定价策略计算产品价格,将JMS消息发送到外部应用程序,并返回创建的产品的ID
  5. 控制器使用创建的产品的ID作为URL参数重定向到产品详细信息页面。

它在很大程度上取决于你正在使用的MVC的风格,以及你正在使用它的环境。

例如,ASP.NET MVC完全是一种UI模式,因此所有三个部分都是表示的一部分。

但是,在MVC的大多数实现中,Controller与用户交互,因此是UI层的一部分。 它可以处理按钮按下和键盘输入……但在许多情况下,控制器还负责将模型和视图连接在一起。

一个普遍的事实是,如果你无法帮助它,你不应该在控制器中做业务逻辑。 存在业务逻辑取决于许多因素。 在某些实现中它可能是模型的一部分,或者它可能是MVC之外的独立层