Spring MVC与Web应用程序中的服务,控制器和数据访问层有何关系



我了解MVC模式以及Spring MVC如何实现它。

但是,Rest controllerData Access LayerService Layer如何适应这种模式?

是吗:

  • 模型 = 数据库(例如 Oracle/MySQL)和存储库类

  • 控制器 = Service(业务逻辑)和 Rest Controller

  • 视图 = JSP/FreeMarker

模型 - 不是数据库,不是存储库,不是实体。模型是抽象的,包含需要显示的所有数据。每个View都有自己的模型。您可以将Model视为 ControllerView 之间数据的容器

在弹簧模型中ModelMap控制器方法的参数。

控制器 - 准备Model,将其传递给View。如果模型非常简单,Controller可以自己完成。

但大多数模型都包含大量数据。这可以是来自数据库的多个实体、来自配置的数据等。在这种情况下,控制器使用较低级别的层:ServiceRepository。它们都有助于Сontroller建立View模型。

upd:Controller的目的就是连接ViewModelController创建并填充Model,然后选择View并将创建的Model传递给View这就是模型和视图建立联系的方式

在弹簧控制器是ControllerRestController

视图 - 是向用户显示来自Model(由Controller传递)的数据的最终点。但是View的另一个作用是从用户那里获取命令,并将其传递给Controller

在 Spring 中,这可能是任何视图引擎的视图:JSPFreemakerThymeleaf


注意:通常,Controller不直接使用Repository。传统上,Controller使用ServiceService使用Repository从数据库中获取数据。所以关系如下:View <- Controller -> Service -> Repository

控制器接受HTTP请求,并经常加载或保存一些数据(来自服务或DAO),并返回HTTP响应。此响应可以是重定向、视图、某些 JSON 或二进制文件。

控制器可以使用服务,但应避免拥有自己的太多逻辑。如果不需要服务逻辑,它还可以直接使用数据访问对象。

模型是视图完成其工作所需的任何信息。它不一定与数据库相关。例如,您可以在注册表单中有一个模型,其中包含电子邮件地址和确认电子邮件地址字段。您没有在数据库中存储 confirmEmailAddress 字段,因此数据库表和模型之间没有一对一的关系。此外,模型可以是未保留的简单计算的数据。

所以让我确保我理解...

用户与界面交互以查看或提交数据。用户调用接口以查看一些数据。该调用(HTTP 请求)将转到调度程序 Servlet (DS)。

然后,DS 会查阅处理程序映射,以帮助它决定使用哪个控制器。

选择后,DS 将请求传递给控制器,控制器根据 GET 或 POST 调用适当的服务方法。Service 方法可能需要与存储库交互,存储库可以与非易失性存储(数据库、XML 文件、文本文件等)交互,以基于定义的业务逻辑构建模型。完成后,模型数据将返回到 DS。

然后,DS 会咨询视图解析程序,以确定应使用哪个视图。视图解析程序为请求选取定义的视图。

然后,DS 将请求转发到视图上,该视图将呈现给用户。

最新更新