Ноде-ова моћна архитектура вођена догађајима је једна од његових најјачих предности.

Кључне Такеаваис

  • Програмирање засновано на догађајима је добар избор за интерактивне апликације, посебно ГУИ апликације, јер омогућава коду да одговори на радње корисника било којим редоследом.
  • Програмирање засновано на догађајима се обично користи у веб апликацијама, где се слушаоци догађаја покрећу када корисници ступе у интеракцију са ДОМ-ом.
  • Имплементација програмирања заснованог на догађајима у Ноде.јс је лака са класом ЕвентЕмиттер, која вам омогућава да креирате прилагођене догађаје и приложите слушаоце догађаја да бисте њима управљали.

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

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

instagram viewer

Шта су догађаји?

Догађај можете замислити као радњу или појаву коју ваш код може препознати и на њу одговорити. Систем или корисник могу покренути догађај и ваш код ће обично регистровати функцију за обраду.

Пример основног догађаја је клик на дугме да бисте извршили одређену радњу. Чин клика на дугме покреће догађај, а функција која се покреће када дође до клика назива се слушалац догађаја (или руковалац).

Шта је програмирање вођено догађајима?

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

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

Парадигма је веома популарна када се праве веб апликације, где се слушаоци догађаја покрећу када корисници ступе у интеракцију Модел објекта документа (ДОМ).

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

Програмирање засновано на догађајима у Ноде.јс

Тхе ЈаваСцрипт петља догађаја је један од основних концепата иза асинхроне природе времена извршавања Ноде.јс. Архитектура вођена догађајима користи свој уграђени ЕвентЕмиттер модул за олакшавање беспрекорног тока извршења.

Уз програмирање засновано на догађајима, Ноде.јс вам омогућава да креирате апликације на страни сервера које могу да управљају интеракцијом корисника, И/О операцијама и обрадом података у реалном времену. Ово се дешава на начин без блокирања, што резултира побољшаним перформансама и лакшим искуством за корисника.

Имплементација програмирања заснованог на догађајима у Ноде.јс је лака када разумете основе дефинисања, покретања и руковања догађајима.

Класа ЕвентЕмиттер

Са ЕвентЕмиттер класе у Ноде.јс, можете да креирате прилагођене догађаје и приложите слушаоце догађаја да бисте их обрадили. Да бисте користили класу у свом коду, увезите је из догађаји модул овако:

// CommonJS
const { EventEmitter } = require("events")

// ES6
import { EventEmitter } from"events"

Класа и њене функције чланице су тада доступне за употребу у својој апликацији. Да бисте почели да емитујете и обрађујете догађаје, иницијализујте нову инстанцу ЕвентЕмиттер класа.

На пример:

const FoodEvents = new EventEmitter()

Ово ствара нови објекат емитера под називом ФоодЕвентс који могу емитовати догађаје и регистровати слушаоце. Класа ЕвентЕммиттер пружа три методе за слушање догађаја: на, аддЛистенер, и једном.

Тхе на метода је најосновнија функција за додавање слушалаца догађаја, и аддЛистенер ради на потпуно исти начин. Обоје прихватају име догађаја и функцију повратног позива као аргументе. Повратни позив је стварна функција руковања. Можете користити на и аддЛистенер наизменично.

Ево како управљате догађајем користећи на метод:

FoodEvents.on("cookie_ready", (data) => {
console.log("Cookie ready for packaging, data received: ", data);
})

Користећи аддЛистенер као директну алтернативу за на:

FoodEvents.addListener("cookie_ready", (data) => {
console.log(
"Cookie will now be packaged and sent out, data received: ",
data
);
})

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

Тхе једном метод региструје једнократни слушалац догађаја који се покреће следећи пут када се догађај покрене. Након тога, систем ће га уклонити из низа слушалаца.

Ево како да користите једном за руковање једнократним догађајем:

FoodEvents.once("cookie_sent", (data) => {
console.log("Cookie is sent out, data received: ", data);
})

У овом случају, емитер ће слушати само за цоокие_сент догађај једном и уклоните руковалац након што се покрене.

Све три методе враћају емитер, тако да можете да повежете позиве са било којим од њих.

Не заборавите да, да би слушалац управљао догађајем, апликација мора да емитује тај догађај у неком тренутку. Ево неког примера кода за емитовање цоокие_реади догађај користећи емитовати метод:

functionbakeCookie() {
console.log("Cookie is baking, almost ready...")

setTimeout(() => {
FoodEvents.emit("cookie_ready", { flavor: "vanilla cookie" })
}, 3000)
}

bakeCookie()

Када покренете овај код који штампа обавештење на конзоли да се колачић пече, чека 3 секунде и емитује цоокие_реади догађај, добићете излаз као на слици испод:

Ово показује како се слушаоци догађаја покрећу редоследом којим их региструјете.

Тхе ЕвентЕмиттер класа пружа више метода, укључујући:

  • ремовеЛистенер: Уклања инстанцу слушаоца из низа слушалаца догађаја. Тхе ван Метода је такође доступна за ову сврху.
  • препендЛистенер: Овај метод такође региструје слушаоца, али, уместо да га додаје на крај низа слушалаца, додаје га на почетак. Затим ће се покренути пре свих других слушалаца које сте можда већ регистровали.
  • препендОнцеЛистенер: Ово ради исто као и препендЛистенер, али слушалац се покреће само једном, као у случају једном.
  • ремовеАллЛистенерс: Ова функција уклања све регистроване слушаоце за одређени именовани догађај или све слушаоце ако му не проследите аргумент.
  • слушаоци: Враћа низ слушалаца имена догађаја које му проследите као аргумент.
  • евентНамес: Ову функцију можете користити да добијете све називе догађаја за које сте већ регистровали слушаоца.
  • сетМакЛистенерс: Ноде.јс подразумевано приказује упозорење када региструјете више од 10 слушалаца за догађај, да спречи цурење меморије. Ову подразумевану вредност можете подесити користећи сетМакЛистенерс. Такође можете проверити ову вредност помоћу гетМакЛистенерс.

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

Које су неке најбоље праксе програмирања заснованог на догађајима?

Сваки приступ програмирању има своје компромисе, а игнорисање најбољих пракси може имати негативне ефекте на вашу апликацију. Следе неке најбоље праксе које треба узети у обзир када правите апликације засноване на догађајима:

  • Користите сажета и дескриптивна имена за догађаје да бисте омогућили чисту и одржавану базу кода.
  • Усвојите добре праксе руковања грешкама и евидентирања како бисте омогућили лако отклањање грешака.
  • Избегавајте пакао повратног позива (угнежђивање више повратних позива) када пишете слушаоце догађаја. Уместо тога користите ЈаваСцрипт обећања.
  • Немојте стварати превише слушалаца за један догађај. Размислите о томе да поделите догађаје и уместо тога их повежете у ланце.

Направите апликације са одговарајућом архитектуром

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

Програмирање вођено догађајима је парадигма која може имати значајан утицај на архитектуру и перформансе апликације. Кад год ваша апликација или њен део зависи од догађаја који ће функционисати, требало би да размотрите програмирање засновано на догађајима.