node.js - Den rätta mappstrukturen för många-till-många-relationer


Jag följer den vanligaste strukturen för NestJS där jag har en separat mapp för varje domän

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

I min applikation har jag många-till-många-relationer mellan user och team. Så, användare kan ha många team, eftersom team kan ha många användare. För detta ändamål skapade jag tabellen user_teams och ett uppenbart separat repository för denna tabell. På de flesta ställen i min applikation behöver jag använda funktioner som getAllUsersInTeam(idTeam: number) och getAllTeamsBelongsToUser(idUser: number) och jag har implementerat dessa funktioner i repository UserTeamRepository. Min fråga är var det rätta stället att ha denna repository-fil? I vilken modul? Jag har flera idéer

  1. Skapa en separat mapp på samma nivå som huvuddomenets enheter

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

    I det här fallet kommer jag potentiellt att ha många mappar för varje många-till-många-relationer vilket kommer att skapa förvirring och oreda i projektet.

  2. Behåll UserTeamRepository i några av modulerna user eller team.

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

    I det här fallet ser jag problem med förståelsen av projektet. Varför behåller vi vissa relationer i en mapp, men andra beslutade vi att behålla på ett annat sätt. Hur kan man snabbt söka efter den här typen av relationer. Jag tror att nya utvecklare kommer att bli förvirrade om var de ska hitta nödvändiga relationer och var de ska placera nya relationer, eftersom det i en bra arkitektur inte borde finnas några frågor om var man ska placera en ny klass.

Jag är öppen för alla diskussioner och tankar. Tack på förhand för feedback!

Svar #1

Det är märkligt för mig att du bestämde dig för att ha en UserTeamRepository över huvud taget.

Om du vill ha en metod getAllUsersInTeam, bör den vara i UserRepository eftersom du begär Users. Om du vill ha en metod getAllTeamsBelongsToUser, bör den vara i TeamRepository eftersom du begär Teams.

Sedan är var och en av dessa metoder ansvarig för att ansluta till din mellantabell för att utföra sitt uppdrag.