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

Предложения, исправления приветствуются