Node.js использует множество шаблонов проектирования concurrent programming
и distributed computing
.
Такие шаблоны, как Reactor, обратные вызовы, модули и наблюдатель, являются ключевыми шаблонами в Node.js.
Многому из этого я научился из программирования в ACE, эти актуальны и по сей день.
Реактор
- Reactor — это ключевой паттерн, позволяющий выполнять неблокирующие операции ввода-вывода в Node.js.
- Позволяет приложениям, управляемым событиями, демультиплексировать и отправлять запросы на обслуживание
- Реактор отправляет обработчики событий, которые реагируют на возникновение определенного события.
- Связанные обработчики событий отвечают за обработку этих запросов на обслуживание.
- Инвертирует поток управления в приложении (не звоните нам, мы позвоним вам)
- Node.js использует этот шаблон для асинхронного выполнения вызовов ввода-вывода путем регистрации обратного вызова, который будет вызываться после завершения операции ввода-вывода.
Модули
- Одной из проблем Javascript является отсутствие пространства имен, которое загрязняет глобальную область видимости. Один из способов решения — использовать шаблон Revealing module pattern.
- Модули — это способ инкапсулировать и разбить ваш код на модули, показывая только соответствующий шаблон модуля раскрытия.
- В Node.js используются модули формата
CommonJS
- Это более чистый способ
export
(открыть) только необходимые методы и программные конструкции и сохранить все остальное приватным для модуля. - В Node.js модули загружаются с помощью require, который отвечает за разрешение и загрузку модулей.
- Модули кэшируются при первой загрузке
- Однако есть предостережения относительно загрузки модулей и кеша, в зависимости от того, откуда они загружены (
inbuilt
,local path
,node_modules folder
).
PS: в файле должен быть только один module.exports
Стиль продолжения-паса (CPS), также известный как callbacks
- Состояние, которое продолжается с течением времени
- CPS — общая концепция функционального программирования, не относящаяся к Javascript или асинхронному выполнению.
- В функциональном программировании, когда функция более высокого порядка вызывается с функцией в качестве аргумента, которая вызывается с результатом после завершения операции, которая распространяет результат, это называется стилем передачи продолжения.
- В JavaScript это называется обратным вызовом
function foo (a, b, done) { done(a + b); } function logResult(result) { console.log(result); } foo('winter ', 'is here', logResult); foo(2000, 18, logResult); foo('2000', -10, logResult);
Наблюдатель
- Обратные вызовы (шаблон стиля передачи продолжения) могут обрабатывать только один обработчик
- Уведомление нескольких обработчиков для события
- Node.js
EventEmitter
- Observer становится важным шаблоном для обработки асинхронных операций в Node.js
Предложения, исправления приветствуются