node.js - 多对多关系的正确文件夹结构

标签 node.js typescript architecture nestjs directory-structure

我遵循 nestjs 最常见的结构,其中每个域都有单独的文件夹

src/
  user/
    controllers/
      user.controller.ts
    repositories/
      user.repository.ts
    services/
      user.service.ts
    user.module.ts
  team/
    // the same as above but for team entity
    team.module.ts
  app.module.ts

在我的应用程序中,userteam 之间存在多对多关系。因此,用户可以有很多团队,因为团队可以有很多用户。为此,我创建了表 user_teams 并为该表创建了一个明显的独立存储库。 在我的应用程序的大部分地方,我需要使用像 getAllUsersInTeam(idTeam: number)getAllTeamsBelongsToUser(idUser: number) 这样的函数,我已经在存储库 UserTeamRepository。我的问题是保存此存储库文件的正确位置在哪里?在哪个模块?我有几个想法

  1. 在与主要域实体相同的级别上创建一个单独的文件夹

    src/
      user/
        // user module files
      team/
        // team module files
      user-team/
        repositories/
          user-team.repository.ts
        user-team.module.ts
    

    在这种情况下,我可能会为每个多对多关系创建很多文件夹,这会给项目带来困惑和困惑。

  2. userteam 的一些模块中保留UserTeamRepository

    src/
      user/
        repositories/
          user-team.repository.ts
      // or
      team/
        repositories/
          user-team.repository.ts
    

    在这种情况下,我发现项目的理解存在问题。为什么我们将一种关系保存在一个文件夹中,而另一种我们决定以另一种方式保存。如何快速搜索这些关系。我认为新的开发人员会混淆在哪里找到需要的关系以及在哪里保持新的关系,因为在好的架构中应该毫无疑问在哪里保持新的类。

我愿意接受任何讨论和想法。提前感谢您的反馈!

最佳答案

令我感到奇怪的是,您决定拥有一个 UserTeamRepository

如果您需要一个方法 getAllUsersInTeam,它应该在 UserRepository 中,因为您正在请求用户。 如果您需要方法 getAllTeamsBelongsToUser,它应该在 TeamRepository 中,因为您正在请求 Teams。

然后,这些方法中的每一个都负责加入您的中间表以完成其任务。

关于node.js - 多对多关系的正确文件夹结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67158919/

相关文章:

node.js - 未处理的拒绝: Headers cant be set after they are sent

node.js - 在 Jade/Node.js 中过滤 Markdown 内容

javascript - 将 Action 链接在一起形成 NgRx (Angular) 的效果

ios - swift 中 MVC 的困惑

node.js - 社交网络中 "Likes"的数据库设计 (MongoDB)

Javascript使用优先级数组对对象数组进行排序

javascript - Mocha 回调中的断言不起作用

typescript - 为可调用模块编写 TypeScript 声明文件

javascript - 如果不使用 v-model.lazy,Vue3 Cleave js 将无法工作

architecture - 新项目的架构分析帮助