node.js - Den riktige mappestrukturen for mange-til-mange-relasjoner


Jeg følger den mest vanlige strukturen for nestjs hvor jeg har en egen mappe for hvert domene

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 applikasjon har jeg mange-til-mange-relasjoner mellom user og team. Så, brukere kan ha mange team, akkurat som team kan ha mange brukere. For dette formålet opprettet jeg tabellen user_teams og et åpenbart eget repository for denne tabellen. På de fleste steder i applikasjonen min trenger jeg å bruke funksjoner som getAllUsersInTeam(idTeam: number) og getAllTeamsBelongsToUser(idUser: number), og jeg har implementert disse funksjonene i repository UserTeamRepository. Mitt spørsmål er hvor det riktige stedet er å ha denne repository-filen? I hvilken modul? Jeg har flere ideer

  1. Opprett en egen mappe på samme nivå som hoveddomeneenhetene

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

    I dette tilfellet vil jeg potensielt ha mange mapper for hver mange-til-mange-relasjon, noe som vil skape forvirring og rot i prosjektet.

  2. Behold UserTeamRepository i noen av modulene user eller team.

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

    I dette tilfellet ser jeg et problem med forståelsen av prosjektet. Hvorfor holder vi én relasjon i én mappe, men en annen har vi besluttet å holde på en annen måte. Hvordan kan vi raskt søke etter denne typen relasjoner? Jeg tror nye utviklere vil bli forvirret over hvor de finner nødvendige relasjoner og hvor de skal holde nye relasjoner, for i en god arkitektur bør det ikke være spørsmål om hvor man skal plassere en ny klasse.

Jeg er åpen for alle diskusjoner og tanker. Takk for tilbakemeldingen på forhånd!

Svar #1

Det er merkelig for meg at du bestemte deg for å ha et UserTeamRepository i det hele tatt.

Hvis du vil ha en metode getAllUsersInTeam, bør den være i UserRepository siden du forespør brukere. Hvis du vil ha en metode getAllTeamsBelongsToUser, bør den være i TeamRepository siden du forespør team.

Deretter er hver av disse metodene ansvarlig for å koble til midttabellen din for å utføre oppgaven sin.