Пажљиво користите ЦКРС образац и можете да креирате чистије, скалабилније Нест апликације.

Уобичајени приступ развоју НестЈС-а је изградња сервиса са којима контролори комуницирају да би приступили подацима. Али овај приступ није једини важећи образац дизајна у НестЈС-у. Постоје и други обрасци дизајна, као што је ЦКРС образац дизајна.

ЦКРС је образац дизајна који раздваја операције читања и писања апликације. Ово раздвајање може помоћи у побољшању скалабилности, перформанси и могућности одржавања.

Сазнајте све о ЦКРС-у и како га можете применити када правите НестЈС АПИ.

Шта је ЦКРС?

ЦКРС означава одвајање одговорности команди и упита. Имплементира употребу команде за креирање, ажурирање и брисање података и упити за преузимање података. Ово помаже да се елиминише потреба за имплементацијом позива базе података апликације у услуге.

Такође омогућава јасну разлику између логике упита базе података за податке и извођења других радњи у апликацији.

ЦКРС приступ је користан у дизајн вођен доменом, који вам омогућава да одвојите логику домена и инфраструктурне операције у вашој апликацији. Можете га користити и за имплементацију сложене пословне логике, али се то не препоручује за једноставније апликације.

Коришћење ЦКРС-а у НестЈС АПИ-ју

Можете користити ЦКРС образац дизајна у АПИ-ју који сте направили у НестЈС-у. Да бисте пратили, морате имати Ноде.јс инсталиран на вашем рачунару и најновија верзија НестЈС-а.

Користите следеће кораке да направите једноставну апликацију за блоговање која имплементира ЦКРС образац дизајна.

Направите Нест пројекат

Направите нови Нест пројекат и генеришите а пошта ресурс за апликацију за блог. То можете учинити покретањем следећих команди у терминалу:

нест нев нестјс-цкрс
нест г модул постова
гнездо г контролор постова
гнездо г сервисних постова

Инсталирајте зависности

Након што сте довршили горе наведене кораке, покрените ову наредбу терминала да бисте инсталирали НестЈС ЦКРС пакет:

нпм инсталл --саве @нестјс/цкрс

Направите поштанску услугу

Додајте следећи код у свој постс.сервице.тс датотеку за дефинисање ПостСервице класа.

// постс.сервице.тс
увоз { Ињекционо} из'@нестјс/цоммон';

извозинтерфејс Пошта {
наслов: низ;
садржај: низ;
}

@Ињецтабле()
извозкласа ПостСервице {
приватни постови само за читање: Пост[] = [];

креирај (пост: Пост): Пост {
ово.постс.пусх (пост);
повратак пошта;
}

финдБиИд (ид: број): Пошта {
повратаково.постс.финд(пошта => пост.ид ид);
}
}

Тхе ПостСервице дефинише Креирај и финдБиИд методе за креирање нове објаве и добијање постојеће објаве из њеног ИД-а.

Дефинишите команде и упите

Следећи корак је дефинисање упита и команди које су језгро ЦКРС обрасца дизајна.

У постова директоријум, креирајте две нове датотеке: цреатеПостЦомманд.цомманд.тс и гетПостКуери.куери.тс. Командна датотека би требало да изгледа овако:

// цреатеПостЦомманд.цомманд.тс
извозкласа ЦреатеПостЦомманд {
конструктор(јавности само за читање наслов: низ, јавности садржај само за читање: низ) {}
}

И датотека дефиниције упита, овако:

// гетПостКуери.куери.тс
извозкласа ГетПостКуери {
конструктор(јавности ИД само за читање: број) {}
}

Креирајте руковаоце командама и упитима

Након што сте успешно дефинисали своје команде и упите, потребно је да креирате руковаоце за њих. Руковалац је функција која покреће команду или упит и враћа резултат.

Створити руковаоци.тс фајл у вашем пошта директоријум и налепите следећи код у њега:

// хандлерс.тс
увоз {ЦоммандХандлер, ИЦоммандХандлер} из'@нестјс/цкрс';
увоз { ЦреатеПостЦомманд } из'./цреатеПостЦомманд.цомманд.тс';
увоз { ПостСервице } из'./пост.сервице';

@ЦоммандХандлер(ЦреатеПостЦомманд)
извозкласа ЦреатеПостХандлер имплементира ИЦоммандХандлер {
конструктор(приватни само за читање постСервице: ПостСервице) {}

асинц изврши (команда: ЦреатеПостЦомманд) {
конст { име, цена } = команда;
конст пост = чекатиово.постСервице.цреате (наслов, садржај);
повратак пошта;
}
}

У истом руковаоци.тс датотеку, можете да модификујете наредбе за увоз да бисте укључили оне испод, да бисте омогућили рад са упитима. Затим можете да примените руковалац упита као што се види у коду испод:

// хандлер.тс
увоз { КуериХандлер, ИКуериХандлер } из'@нестјс/цкрс';
увоз { ГетПостКуери } из'./гетПостКуери.куери';
увоз { ПостСервице } из'./пост.сервице';

// обрађивач упита
@КуериХандлер(ГетПродуцтКуери)
извозкласа ГетПостХандлер имплементира ИКуериХандлер {
конструктор(приватни само за читање постСервице: ПостСервице) {}

асинц изврши (упит: ГетПостКуери) {
конст { ид } = упит;
конст пост = чекатиово.постСервице.финдОнеБиИд (ид);
повратак пошта;
}
}

Регистер Хандлерс

Последњи корак је да региструјете руковаоце командама и упитима са НестЈС модулом.

// пост.модуле.тс
увоз { Модул } из'@нестјс/цоммон';
увоз {ЦоммандХандлерс, КуериХандлерс} из'хандлерс.тс';
увоз { ПостСервице } из'./пост.сервице';

@Модуле({
провајдери: [
ПостСервице,
...ЦоммандХандлерс,
...КуериХандлерс,
],
})
извозкласа ПостМодуле {}

Овај код региструје ПостСервице, ЦоммандХандлерс, и КуериХандлерс у провајдери низ. Употреба оператора ширења (...) је спајање низова упит руковаоци и команда руковаоци у провајдери низ.

Извршите команде и упите

Регистроване команде и руковаоци упита су употребљиви у контролерима. Следећи код је имплементација а постова контролер који ће прихватати ХТТП захтеве и враћати потребне одговоре.

// постс.цонтроллер.тс
увоз { Тело, контролор, порука } из'@нестјс/цоммон';
увоз { ЦоммандБус } из'@нестјс/цкрс';
увоз { ЦреатеПостЦомманд } из'./цреатеПостЦомманд.цомманд.тс';

// контролер који имплементира команду
@Цонтроллер('постови')
извозкласа ПостЦонтроллер {
конструктор(приватни само за читање цоммандБус: ЦоммандБус) {}

@Пошта()
асинц цреатеПост(@Боди() тело: { наслов: низ; садржај: низ }) {
конст { наслов, садржај } = тело;
конст команда = Нова ЦреатеПостЦомманд (наслов, садржај);
конст пост = чекатиово.цоммандБус.екецуте (команда);
повратак пошта;
}
}

У коду изнад, ЦоммандБус извршава ЦреатеПостЦомманд и креира нову објаву.

Овај код показује како да имплементирате контролер који користи упит:

// постс.цонтроллер.тс
увоз { Цонтроллер, Гет, Парам } из'@нестјс/цоммон';
увоз { КуериБус } из'@нестјс/цкрс';
увоз { ГетПостКуери } из'./гетПостКуери.куери';

@Цонтроллер('постови')
извозкласа ПостЦонтроллер {
конструктор(приватни куериБус само за читање: КуериБус) {}

@Добити(':ид')
асинц гетПост(@Парам('ид') ид: број) {
конст упит = Нова ГетПостКуери (ид);
конст пост = чекатиово.куериБус.екецуте (упит);
повратак пошта;
}
}

Тхе куериБус извршава ГетПостКуери који добија пост са датим ИД-ом и враћа га.

Након што завршите све горе наведене кораке, сада би требало да имате минималистичку, радну апликацију за креирање и преузимање постова на блогу.

Иако код овде користи низ за чување креираних постова у меморији, већа је вероватноћа да ћете користити базу података у производњи. Можете користити или а СКЛ база података, или а НоСКЛ база података као што је МонгоДБ, пошто НестЈС подржава обе опције.

Изградња АПИ-ја са ЦКРС шаблоном дизајна

Укључивање ЦКРС шаблона дизајна у вашу НестЈС апликацију може помоћи у скалабилности, перформансама и могућности одржавања. ЦКРС омогућава ефикасније и оптимизоване операције одвајањем операција читања и писања које апликација спроводи.

Пакет @нестјс/цкрс обезбеђује градивни блок за имплементацију ЦКРС-а у НестЈС са командама и руковаоцима упита. Све у свему, ЦКРС је моћан образац који може помоћи у стварању ефикаснијих и скалабилнијих апликација, и требало би да одмерите своје могућности пре него што га употребите.