Пажљиво користите ЦКРС образац и можете да креирате чистије, скалабилније Нест апликације.
Уобичајени приступ развоју НестЈС-а је изградња сервиса са којима контролори комуницирају да би приступили подацима. Али овај приступ није једини важећи образац дизајна у НестЈС-у. Постоје и други обрасци дизајна, као што је ЦКРС образац дизајна.
ЦКРС је образац дизајна који раздваја операције читања и писања апликације. Ово раздвајање може помоћи у побољшању скалабилности, перформанси и могућности одржавања.
Сазнајте све о ЦКРС-у и како га можете применити када правите НестЈС АПИ.
Шта је ЦКРС?
ЦКРС означава одвајање одговорности команди и упита. Имплементира употребу команде за креирање, ажурирање и брисање података и упити за преузимање података. Ово помаже да се елиминише потреба за имплементацијом позива базе података апликације у услуге.
Такође омогућава јасну разлику између логике упита базе података за податке и извођења других радњи у апликацији.
ЦКРС приступ је користан у дизајн вођен доменом, који вам омогућава да одвојите логику домена и инфраструктурне операције у вашој апликацији. Можете га користити и за имплементацију сложене пословне логике, али се то не препоручује за једноставније апликације.
Коришћење ЦКРС-а у НестЈС АПИ-ју
Можете користити ЦКРС образац дизајна у АПИ-ју који сте направили у НестЈС-у. Да бисте пратили, морате имати Ноде.јс инсталиран на вашем рачунару и најновија верзија НестЈС-а.
Користите следеће кораке да направите једноставну апликацију за блоговање која имплементира ЦКРС образац дизајна.
Направите Нест пројекат
Направите нови Нест пројекат и генеришите а пошта ресурс за апликацију за блог. То можете учинити покретањем следећих команди у терминалу:
нест нев нестјс-цкрс
нест г модул постова
гнездо г контролор постова
гнездо г сервисних постова
Инсталирајте зависности
Након што сте довршили горе наведене кораке, покрените ову наредбу терминала да бисте инсталирали НестЈС ЦКРС пакет:
нпм инсталл --саве @нестјс/цкрс
Направите поштанску услугу
Додајте следећи код у свој постс.сервице.тс датотеку за дефинисање ПостСервице класа.
// постс.сервице.тс
увоз { Ињекционо} из'@нестјс/цоммон';извозинтерфејс Пошта {
наслов: низ;
садржај: низ;
}@Ињецтабле()
извозкласа ПостСервице {
приватни постови само за читање: Пост[] = [];креирај (пост: Пост): Пост {
ово.постс.пусх (пост);
повратак пошта;
}
финдБиИд (ид: број): Пошта {
повратаково.постс.финд(пошта => пост.ид ид);
}
}
Тхе ПостСервице дефинише Креирај и финдБиИд методе за креирање нове објаве и добијање постојеће објаве из њеног ИД-а.
Дефинишите команде и упите
Следећи корак је дефинисање упита и команди које су језгро ЦКРС обрасца дизајна.
У постова директоријум, креирајте две нове датотеке: цреатеПостЦомманд.цомманд.тс и гетПостКуери.куери.тс. Командна датотека би требало да изгледа овако:
// цреатеПостЦомманд.цомманд.тс
извозкласа ЦреатеПостЦомманд {
конструктор(јавности само за читање наслов: низ, јавности садржај само за читање: низ) {}
}
И датотека дефиниције упита, овако:
// гетПостКуери.куери.тс
извозкласа ГетПостКуери {
конструктор(јавности ИД само за читање: број) {}
}
Креирајте руковаоце командама и упитима
Након што сте успешно дефинисали своје команде и упите, потребно је да креирате руковаоце за њих. Руковалац је функција која покреће команду или упит и враћа резултат.
Створити руковаоци.тс фајл у вашем пошта директоријум и налепите следећи код у њега:
// хандлерс.тс
увоз {ЦоммандХандлер, ИЦоммандХандлер} из'@нестјс/цкрс';
увоз { ЦреатеПостЦомманд } из'./цреатеПостЦомманд.цомманд.тс';
увоз { ПостСервице } из'./пост.сервице';@ЦоммандХандлер(ЦреатеПостЦомманд)
извозкласа ЦреатеПостХандлер имплементира ИЦоммандХандлер{
конструктор(приватни само за читање постСервице: ПостСервице) {}
асинц изврши (команда: ЦреатеПостЦомманд) {
конст { име, цена } = команда;
конст пост = чекатиово.постСервице.цреате (наслов, садржај);
повратак пошта;
}
}
У истом руковаоци.тс датотеку, можете да модификујете наредбе за увоз да бисте укључили оне испод, да бисте омогућили рад са упитима. Затим можете да примените руковалац упита као што се види у коду испод:
// хандлер.тс
увоз { КуериХандлер, ИКуериХандлер } из'@нестјс/цкрс';
увоз { ГетПостКуери } из'./гетПостКуери.куери';
увоз { ПостСервице } из'./пост.сервице';// обрађивач упита
@КуериХандлер(ГетПродуцтКуери)
извозкласа ГетПостХандлер имплементира ИКуериХандлер{
конструктор(приватни само за читање постСервице: ПостСервице) {}
асинц изврши (упит: ГетПостКуери) {
конст { ид } = упит;
конст пост = чекатиово.постСервице.финдОнеБиИд (ид);
повратак пошта;
}
}
Регистер Хандлерс
Последњи корак је да региструјете руковаоце командама и упитима са НестЈС модулом.
// пост.модуле.тс
увоз { Модул } из'@нестјс/цоммон';
увоз {ЦоммандХандлерс, КуериХандлерс} из'хандлерс.тс';
увоз { ПостСервице } из'./пост.сервице';
@Модуле({
провајдери: [
ПостСервице,
...ЦоммандХандлерс,
...КуериХандлерс,
],
})
извозкласа ПостМодуле {}
Овај код региструје ПостСервице, ЦоммандХандлерс, и КуериХандлерс у провајдери низ. Употреба оператора ширења (...) је спајање низова упит руковаоци и команда руковаоци у провајдери низ.
Извршите команде и упите
Регистроване команде и руковаоци упита су употребљиви у контролерима. Следећи код је имплементација а постова контролер који ће прихватати ХТТП захтеве и враћати потребне одговоре.
// постс.цонтроллер.тс
увоз { Тело, контролор, порука } из'@нестјс/цоммон';
увоз { ЦоммандБус } из'@нестјс/цкрс';
увоз { ЦреатеПостЦомманд } из'./цреатеПостЦомманд.цомманд.тс';// контролер који имплементира команду
@Цонтроллер('постови')
извозкласа ПостЦонтроллер {
конструктор(приватни само за читање цоммандБус: ЦоммандБус) {}
@Пошта()
асинц цреатеПост(@Боди() тело: { наслов: низ; садржај: низ }) {
конст { наслов, садржај } = тело;
конст команда = Нова ЦреатеПостЦомманд (наслов, садржај);
конст пост = чекатиово.цоммандБус.екецуте (команда);
повратак пошта;
}
}
У коду изнад, ЦоммандБус извршава ЦреатеПостЦомманд и креира нову објаву.
Овај код показује како да имплементирате контролер који користи упит:
// постс.цонтроллер.тс
увоз { Цонтроллер, Гет, Парам } из'@нестјс/цоммон';
увоз { КуериБус } из'@нестјс/цкрс';
увоз { ГетПостКуери } из'./гетПостКуери.куери';@Цонтроллер('постови')
извозкласа ПостЦонтроллер {
конструктор(приватни куериБус само за читање: КуериБус) {}
@Добити(':ид')
асинц гетПост(@Парам('ид') ид: број) {
конст упит = Нова ГетПостКуери (ид);
конст пост = чекатиово.куериБус.екецуте (упит);
повратак пошта;
}
}
Тхе куериБус извршава ГетПостКуери који добија пост са датим ИД-ом и враћа га.
Након што завршите све горе наведене кораке, сада би требало да имате минималистичку, радну апликацију за креирање и преузимање постова на блогу.
Иако код овде користи низ за чување креираних постова у меморији, већа је вероватноћа да ћете користити базу података у производњи. Можете користити или а СКЛ база података, или а НоСКЛ база података као што је МонгоДБ, пошто НестЈС подржава обе опције.
Изградња АПИ-ја са ЦКРС шаблоном дизајна
Укључивање ЦКРС шаблона дизајна у вашу НестЈС апликацију може помоћи у скалабилности, перформансама и могућности одржавања. ЦКРС омогућава ефикасније и оптимизоване операције одвајањем операција читања и писања које апликација спроводи.
Пакет @нестјс/цкрс обезбеђује градивни блок за имплементацију ЦКРС-а у НестЈС са командама и руковаоцима упита. Све у свему, ЦКРС је моћан образац који може помоћи у стварању ефикаснијих и скалабилнијих апликација, и требало би да одмерите своје могућности пре него што га употребите.