首页 > 解决方案 > 从另一个控制器调用控制器是一个坏主意吗?

问题描述

我正在使用 node.js 和 express.js 构建一个 Web 服务,并第一次尝试使用 MVC 架构。

我有一个用户发送到特定路由的 html 表单(假设 POST 到 /formprocessing)。在后端,当我收到表单数据时,我必须执行几项任务。

  1. 首先我将数据保存在数据库中
  2. 然后我必须做一些数据处理
  3. 最后,我向客户端发送了一个 zip 文件

因此,一开始我将代码拆分到不同的控制器中,以便每个控制器执行一项任务。例如,formController 将数据保存在 de db 中,processingController 进行一些计算,然后 zipController 将 zip 文件发送给客户端。但是,现在我在处理请求时尝试将所有三个部分放在一起,但我在互联网上发现我不应该从另一个组件调用一个组件(从另一个调用控制器)。那么我应该使用哪种正确方法?将控制器包装为实用函数并仅从一个控制器调用它们?

标签: node.jsmodel-view-controllerroutescontroller

解决方案


的想法Controller是,这是一个处理应用程序传输层的实体。理想情况下,唯一调用 Controller 的应该是您的传输层,例如 HTTP 请求,因为它通常包含一些特定于传输层的代码。

通常应用程序具有三个级别,ControllerServicesModels

  1. Controller处理传输层并调用一些Services.
  2. Service包含业务逻辑并与之交互以Models将更改持久保存在数据库中。
  3. Models与数据库交互。

因此,当您需要在控制器中执行某些操作时,您将使用Service与传输层无关的操作。所以你可以有服务A,它需要做一些服务,B你可以使用服务B内部的服务方法A来实现它所需要的,而无需调用控制器。

PS 这里有一些对你有用的读物​​ https://dev.to/santypk4/bulletproof-node-js-project-architecture-4epf


推荐阅读