【问题标题】:The right folder structure for many-to-many relations多对多关系的正确文件夹结构
【发布时间】:2021-07-13 11:14:55
【问题描述】:

我遵循 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
    

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

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

【问题讨论】:

    标签: node.js typescript architecture nestjs directory-structure


    【解决方案1】:

    我很奇怪你决定使用UserTeamRepository

    如果你想要一个方法getAllUsersInTeam,它应该在UserRepository,因为你正在请求用户。 如果你想要一个方法getAllTeamsBelongsToUser,它应该在TeamRepository,因为你正在请求团队。

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

    【讨论】:

    • 我不希望用户知道与团队的某些关系。我想将它分开并以孤立的方式单独管理,彼此不了解。因此,一个存储库 - 一个表。如果在我的系统中是一个新实体,它也将与用户具有多对多关系,那么我的 UserRepository 必须知道大约 3 个表。这不好,这种关系会增长,系统变得不可预测,因为需要在两个地方而不是一个地方编写与关系 user- 相关的业务逻辑。这就是为什么拥有一个存储库 - 一张表很重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多