Käytä CQRS-kuviota varoen, niin voit luoda puhtaampia ja skaalautuvia Nest-sovelluksia.

Yleinen lähestymistapa NestJS-kehitykseen on rakentaa palveluita, joiden kanssa ohjaimet kommunikoivat päästäkseen tietoihin. Mutta tämä lähestymistapa ei ole ainoa kelvollinen suunnittelumalli NestJS: ssä. On muitakin suunnittelumalleja, kuten CQRS-suunnittelukuvio.

CQRS on suunnittelumalli, joka erottaa sovelluksen luku- ja kirjoitustoiminnot. Tämä erottelu voi auttaa parantamaan skaalautuvuutta, suorituskykyä ja ylläpidettävyyttä.

Lue kaikki CQRS: stä ja kuinka voit käyttää sitä NestJS-sovellusliittymää rakentaessasi.

Mikä on CQRS?

CQRS tarkoittaa komento-kysely vastuun erottelu. Se toteuttaa käytön komentoja luoda, päivittää ja poistaa tietoja ja kyselyitä tietojen hakemiseen. Tämä auttaa poistamaan tarpeen toteuttaa sovelluksen tietokantakutsut palveluihin.

Se mahdollistaa myös selkeän eron tietokannasta tietojen kyselyn logiikan ja muiden toimintojen suorittamisen välillä sovelluksessa.

CQRS-lähestymistapa on hyödyllinen

verkkotunnuslähtöinen suunnittelu, jonka avulla voit erottaa toimialueen logiikan ja infrastruktuuritoiminnot sovelluksessasi. Voit käyttää sitä myös monimutkaisen liiketoimintalogiikan toteuttamiseen, mutta tätä ei suositella yksinkertaisemmille sovelluksille.

CQRS: n käyttäminen NestJS-sovellusliittymässä

Voit käyttää CQRS-suunnittelumallia sovellusliittymässä, jonka rakennat NestJS: ssä. Jotta voit seurata mukana, sinulla on oltava Node.js asennettuna tietokoneellesi ja uusin NestJS-versio.

Seuraavien vaiheiden avulla voit rakentaa yksinkertaisen blogisovelluksen, joka toteuttaa CQRS-suunnittelumallin.

Luo Nest-projekti

Luo uusi Nest-projekti ja luo a lähettää resurssi blogisovellukseen. Voit tehdä tämän suorittamalla seuraavat komennot terminaalissa:

nest new nestjs-cqrs
nest g -moduulin viestit
nest g -ohjainpostit
nest g -palvelupylväät

Asenna riippuvuudet

Kun olet suorittanut yllä olevat vaiheet, suorita tämä päätekomento asentaaksesi NestJS CQRS -paketin:

npm install --save @nestjs/cqrs

Luo postipalvelu

Lisää seuraava koodi omaan posts.service.ts tiedosto määrittääksesi Postipalvelu luokkaa.

// posts.service.ts
tuonti { Injektoitava } alkaen"@nestjs/common";

viedäkäyttöliittymä Lähetä {
otsikko: merkkijono;
sisältö: merkkijono;
}

@Injektoitava()
viedäluokkaa Postipalvelu {
yksityinen vain luku -viestit: Viesti[] = [];

luo (viesti: Viesti): Lähetä {
Tämä.posts.push (post);
palata lähettää;
}

findById (id: määrä): Lähetä {
palataTämä.posts.find(lähettää => post.id id);
}
}

The Postipalvelu määrittelee luoda ja findById tapoja luoda uusi viesti ja saada olemassa oleva viesti sen tunnuksesta.

Määritä komennot ja kyselyt

Seuraava vaihe on määrittää kyselyt ja komennot, jotka ovat CQRS-suunnittelumallin ydin.

Vuonna viestit hakemistoon, luo kaksi uutta tiedostoa: luo PostCommand.command.ts ja getPostQuery.query.ts. Komentotiedoston pitäisi näyttää tältä:

// createPostCommand.command.ts
viedäluokkaa CreatePostCommand {
rakentaja(julkinen vain luku -otsikko: merkkijono, julkinen vain luku -sisältö: merkkijono) {}
}

Ja kyselyn määritystiedosto, kuten tämä:

// getPostQuery.query.ts
viedäluokkaa GetPostQuery {
rakentaja(julkinen vain luku -tunnus: määrä) {}
}

Luo komento- ja kyselykäsittelijät

Kun olet määrittänyt komennot ja kyselyt onnistuneesti, sinun on luotava niille käsittelijät. Käsittelijä on funktio, joka suorittaa komennon tai kyselyn ja palauttaa tuloksen.

Luo käsittelijät.ts tiedosto omassasi lähettää hakemistoon ja liitä siihen seuraava koodi:

// handlers.ts
tuonti { CommandHandler, ICommandHandler } alkaen'@nestjs/cqrs';
tuonti { CreatePostCommand } alkaen'./createPostCommand.command.ts';
tuonti { Postipalvelu } alkaen'./post.service';

@CommandHandler(CreatePostCommand)
viedäluokkaa Luo PostHandler toteuttaa ICommandHandler {
rakentaja(yksityinen readonly postService: PostService) {}

asynk suorita (komento: CreatePostCommand) {
konst { nimi, hinta } = komento;
konst viesti = odottaaTämä.postService.create (otsikko, sisältö);
palata lähettää;
}
}

Samassa käsittelijät.ts tiedostoa, voit muokata tuontilausekkeita sisältämään alla olevat, jotta voit työskennellä kyselyiden kanssa. Voit sitten ottaa käyttöön kyselynkäsittelijän alla olevan koodin mukaisesti:

// handler.ts
tuonti { QueryHandler, IQueryHandler } alkaen'@nestjs/cqrs';
tuonti { GetPostQuery } alkaen'./getPostQuery.query';
tuonti { Postipalvelu } alkaen'./post.service';

// kyselyn käsittelijä
@QueryHandler(GetProductQuery)
viedäluokkaa GetPostHandler toteuttaa IQueryHandler {
rakentaja(yksityinen readonly postService: PostService) {}

asynk suorita (kysely: GetPostQuery) {
konst { id } = kysely;
konst viesti = odottaaTämä.postService.findOneById (id);
palata lähettää;
}
}

Rekisterikäsittelijät

Viimeinen vaihe on rekisteröidä komento- ja kyselykäsittelijät NestJS-moduuliin.

// post.module.ts
tuonti { Moduuli } alkaen"@nestjs/common";
tuonti { CommandHandlers, QueryHandlers } alkaen"handlers.ts";
tuonti { Postipalvelu } alkaen'./post.service';

@Moduuli({
palveluntarjoajat: [
Postipalvelu,
...Command Handlers,
...QueryHandlers,
],
})
viedäluokkaa PostModule {}

Tämä koodi rekisteröi Postipalvelu, Komentokäsittelijät, ja Kyselykäsittelijät in tarjoajat joukko. Hajautusoperaattorin käyttö (...) on yhdistää taulukot kysely käsittelijät ja komento käsittelijät osaksi tarjoajat joukko.

Suorita komennot ja kyselyt

Rekisteröityjä komentoja ja kyselykäsittelijöitä voidaan käyttää ohjaimissa. Seuraava koodi on a viestit ohjain, joka hyväksyy HTTP-pyynnöt ja palauttaa vaaditut vastaukset.

// posts.controller.ts
tuonti { Runko, ohjain, viesti } alkaen"@nestjs/common";
tuonti { CommandBus } alkaen'@nestjs/cqrs';
tuonti { CreatePostCommand } alkaen'./createPostCommand.command.ts';

// ohjain, joka toteuttaa komennon
@Ohjain("viestit")
viedäluokkaa PostController {
rakentaja(yksityinen vain luku -komentoväylä: CommandBus) {}

@Lähettää()
asynk createPost(@Keho() body: { otsikko: merkkijono; sisältö: merkkijono }) {
konst { otsikko, sisältö } = runko;
konst komento = Uusi CreatePostCommand (otsikko, sisältö);
konst viesti = odottaaTämä.commandBus.execute (komento);
palata lähettää;
}
}

Yllä olevassa koodissa CommandBus toteuttaa Luo PostCommand ja luo uuden viestin.

Tämä koodi näyttää, kuinka kyselyä käyttävä ohjain otetaan käyttöön:

// posts.controller.ts
tuonti { Ohjain, Get, Param } alkaen"@nestjs/common";
tuonti { QueryBus } alkaen'@nestjs/cqrs';
tuonti { GetPostQuery } alkaen'./getPostQuery.query';

@Ohjain("viestit")
viedäluokkaa PostController {
rakentaja(yksityinen vain luku queryBus: QueryBus) {}

@Saada(':id')
asynk getPost(@Param('id') id: määrä) {
konst kysely = Uusi GetPostQuery (id);
konst viesti = odottaaTämä.queryBus.execute (kysely);
palata lähettää;
}
}

The queryBus teloittaa GetPostQuery joka saa postauksen annetulla tunnuksella ja palauttaa sen.

Kun olet suorittanut kaikki yllä olevat vaiheet, sinulla pitäisi nyt olla minimalistinen, toimiva sovellus blogitekstien luomiseen ja hakemiseen.

Vaikka tässä oleva koodi käyttää taulukkoa luotujen viestien tallentamiseen muistiin, käytät todennäköisemmin tietokantaa tuotannossa. Voit joko käyttää a SQL-tietokanta, tai a NoSQL-tietokanta, kuten MongoDB, koska NestJS tukee molempia vaihtoehtoja.

Rakenna API CQRS-suunnittelumallilla

CQRS-suunnittelumallin sisällyttäminen NestJS-sovellukseesi voi parantaa skaalautuvuutta, suorituskykyä ja ylläpidettävyyttä. CQRS mahdollistaa tehokkaamman ja optimoidun toiminnan erottamalla sovelluksen suorittamat luku- ja kirjoitustoiminnot.

@nestjs/cqrs-paketti tarjoaa rakennuspalikka CQRS: n toteuttamiseen NestJS: ssä komentojen ja kyselynkäsittelijöiden avulla. Kaiken kaikkiaan CQRS on tehokas malli, joka voi auttaa luomaan tehokkaampia ja skaalautuvia sovelluksia, ja sinun tulee punnita vaihtoehtoja ennen sen käyttöä.