复杂的应用程序逻辑属于 MVC 模型的什么地方?

Where does complex application logic belong in MVC model?

所以我有一个快捷应用程序。我使用 MVC 模型,模型层有 Sequelize,视图有 Handlebars,控制器有 Express。

我的应用程序对 DB 进行了一些微不足道的操作,我通过扩展 Sequelize 函数并尽可能从控制器内部使用模型来实现这一点。

但是,我确实有一些更复杂的任务:

为了保持可读性,我应该按照惯例把这段代码放在哪里?

我确实有 utils/ 文件夹,但这似乎是一个懒惰的选择。我最终会得到随机函数,我在一个地方没有更好的地方。

你们在哪里将这样的代码放在您的应用程序中(与模型一起工作但不是单个模型的一部分的代码)?

编辑

我最后得到了

db/
---models/
---interactors/
------invoicing/
------user-manipulation/
...

结构

我的经验是你会有一个服务层,或者 business logic 层。

如果您有 controllersservicesmodels 等的单独文件夹,您可以以明显的方式构建它。或者做一个模块化或基于组件的结构,该结构被分组通过 model/API 类型,其中 users 将包含 user-based 文件。使用多个模型时,服务可以依赖于其他服务,而控制器可以依赖于多个服务,但请确保控制器没有任何业务逻辑。

请注意 link 中的内容:

It is contrasted with the remainder of the software that might be concerned with lower-level details of managing a database or displaying the user interface, system infrastructure, or generally connecting various parts of the program.

对于 MVC 应用程序,这意味着至少有四层。模型、视图、控制器和服务;这很常见。但是,将数据库访问拉出到它自己的层中也很有价值。这样您就不会受限于特定的存储类型、供应商或框架,并且有助于测试。这将是 ORM 使用的地方,例如服务使用的地方。