复杂的应用程序逻辑属于 MVC 模型的什么地方?
Where does complex application logic belong in MVC model?
所以我有一个快捷应用程序。我使用 MVC 模型,模型层有 Sequelize,视图有 Handlebars,控制器有 Express。
我的应用程序对 DB 进行了一些微不足道的操作,我通过扩展 Sequelize 函数并尽可能从控制器内部使用模型来实现这一点。
但是,我确实有一些更复杂的任务:
- 与多个模型一起工作
- 必须执行额外的网络数据检索和计算
- 更改数据库中的许多内容。
为了保持可读性,我应该按照惯例把这段代码放在哪里?
- 我无法将它放入
models/
文件夹,它不是 Sequelize Model
class
- 我不能将它保留在控制器代码中,这会降低此代码的可重用性并使我的控制器膨胀
- 我不能将它放入
controllers/
文件夹内的单独文件中,因为它不是快速兼容的功能,因此本身不是控制器。
我确实有 utils/
文件夹,但这似乎是一个懒惰的选择。我最终会得到随机函数,我在一个地方没有更好的地方。
你们在哪里将这样的代码放在您的应用程序中(与模型一起工作但不是单个模型的一部分的代码)?
编辑
我最后得到了
db/
---models/
---interactors/
------invoicing/
------user-manipulation/
...
结构
我的经验是你会有一个服务层,或者 business logic 层。
如果您有 controllers
、services
、models
等的单独文件夹,您可以以明显的方式构建它。或者做一个模块化或基于组件的结构,该结构被分组通过 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 使用的地方,例如服务使用的地方。
所以我有一个快捷应用程序。我使用 MVC 模型,模型层有 Sequelize,视图有 Handlebars,控制器有 Express。
我的应用程序对 DB 进行了一些微不足道的操作,我通过扩展 Sequelize 函数并尽可能从控制器内部使用模型来实现这一点。
但是,我确实有一些更复杂的任务:
- 与多个模型一起工作
- 必须执行额外的网络数据检索和计算
- 更改数据库中的许多内容。
为了保持可读性,我应该按照惯例把这段代码放在哪里?
- 我无法将它放入
models/
文件夹,它不是 SequelizeModel
class - 我不能将它保留在控制器代码中,这会降低此代码的可重用性并使我的控制器膨胀
- 我不能将它放入
controllers/
文件夹内的单独文件中,因为它不是快速兼容的功能,因此本身不是控制器。
我确实有 utils/
文件夹,但这似乎是一个懒惰的选择。我最终会得到随机函数,我在一个地方没有更好的地方。
你们在哪里将这样的代码放在您的应用程序中(与模型一起工作但不是单个模型的一部分的代码)?
编辑
我最后得到了
db/
---models/
---interactors/
------invoicing/
------user-manipulation/
...
结构
我的经验是你会有一个服务层,或者 business logic 层。
如果您有 controllers
、services
、models
等的单独文件夹,您可以以明显的方式构建它。或者做一个模块化或基于组件的结构,该结构被分组通过 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 使用的地方,例如服务使用的地方。