MVC模型在哪里属于复杂的应用程序逻辑?

时间:2019-06-25 00:06:59

标签: node.js directory-structure application-design

所以我有一个快递应用。我使用MVC模型,对于模型层具有Sequelize,对于View具有Handlebars,对于Controller具有Express。

我的应用程序对DB进行了一些琐碎的操作,我通过扩展Sequelize函数并在Controller内部尽可能多地使用Model来实现此目的。

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

  • 使用多个模型
  • 必须执行其他网络数据检索和计算
  • 更改数据库中的许多内容。

为了保持可读性,我该将该代码放在哪里?

  • 我无法将其放入models/文件夹中,它不是Sequelize Model
  • 我无法将其保留在控制器代码中,这降低了该代码的可重用性并膨胀了我的控制器
  • 我无法将其放入controllers/文件夹中的单独文件中,因为它不具有表达兼容功能,因此本身不是控制器。

我确实有utils/文件夹,但这似乎是一个懒惰的选择。疾病最终会带来随机性,我在一个地方没有比这更好的地方了。

你们在哪里把这样的代码放在您的应用程序中(该代码可与模型一起使用,但不属于单个代码)?

编辑

我最终以

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

结构

1 个答案:

答案 0 :(得分:1)

我的经验是,您将拥有一个服务层或business logic层。

您可以采用明显的方式来构造它,例如,您有用于controllersservicesmodels等的单独文件夹。或者执行由模块化或基于组件的结构,并按型号/ API类型,其中users将包含基于用户的文件。当使用多种模型时,服务可以依赖于其他服务,而控制器可以依赖于多种服务,但要确保控制器没有任何业务逻辑。

在链接中的提示:

  

与软件的其余部分形成对比,其余部分可能与管理数据库或显示用户界面,系统基础结构或通常连接程序各个部分的底层细节有关。

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