Если вы работали над некоторыми из новых веб-фреймворков, весьма вероятно, что вы встречали термин промежуточное ПО. В этой статье я объясню, что такое промежуточное ПО и почему мы его используем. Некоторые из примеров, которые я буду использовать, будут в основном в контексте redux.

Позвольте мне начать с того, что такое промежуточное ПО?

Промежуточное ПО - это код или приложение, которое используется между веб-платформой, получающей запрос, и структурой, генерирующей ответ.

Кажется довольно простым, правда?

Что ж, это определение больше основано на веб-аспекте промежуточного программного обеспечения. Но на самом деле промежуточное программное обеспечение есть повсюду, начиная с веб-сайтов и заканчивая нашим телефоном, ноутбуками, базами данных, даже когда мы играем в игры, некоторые промежуточные программы предоставляют нам такие услуги, как графический рендеринг и физическое моделирование.

Зачем использовать промежуточное ПО?

Чтобы понять, почему промежуточное программное обеспечение важно и почему мы его используем, позвольте мне привести пример.

Представьте, что к вам приедет ваш друг из Японии. Вам нужно помочь ей с покупками, но она не знает вашего родного языка. Чтобы сделать ее путешествие успешным и стать хорошим другом, вам придется выполнять роль переводчика и помогать ей в покупках.

Промежуточное ПО делает то же самое, позволяя системе или приложению взаимодействовать друг с другом. Промежуточное ПО важно, потому что оно делает возможной синергию и интеграцию между этими приложениями.

Теперь давайте посмотрим, где промежуточное ПО используется в других отраслях и как оно на него влияет.

Использование промежуточного программного обеспечения

Мы уже видели, что промежуточное ПО действует как связующее звено между различным программным обеспечением.

Но что именно он делает помимо того, что выступает в качестве связующего звена между различным программным обеспечением?

Вот некоторые из вариантов использования и типов промежуточного программного обеспечения, используемого в разных отраслях:

  1. Управление транзакциями:

Как следует из названия, это промежуточное ПО широко используется в бизнесе или банковской сфере. Транзакционное промежуточное ПО может использоваться для управления отдельными транзакциями и контроля за тем, чтобы любые проблемы не повредили систему или базу данных. Он делает это путем управления приложениями транзакций, отправки обновлений базы данных, связанных с транзакцией, и обеспечения соблюдения бизнес-правил и логики транзакции.

2. Очереди сообщений:

Используемое здесь промежуточное программное обеспечение называется промежуточным программным обеспечением, ориентированным на сообщения (MOM). Что он делает, так это то, что он позволяет отправлять и получать сообщения между приложениями или системами. Помимо возможности передачи сообщений между различными приложениями, промежуточное программное обеспечение, ориентированное на сообщения, также имеет механизм организации очереди, который позволяет взаимодействовать между сервером и клиентом синхронно, когда целевой узел занят или работает медленно.

3. Веб-сервер:

Промежуточное ПО также может принимать запросы клиентов от веб-браузеров и направлять их на главный сервер / базу данных, а затем доставлять ответы в браузеры.

Подробнее о различных типах промежуточного программного обеспечения вы можете прочитать здесь.

Теперь давайте посмотрим, как промежуточное ПО используется в структуре redux.

Промежуточное ПО в Redux

В redux промежуточное ПО обеспечивает стороннюю точку расширения между отправкой действия и моментом его достижения редуктором.

Промежуточное ПО не является программным обеспечением, в случае структуры redux это больше похоже на несколько строк кода. Наиболее известные промежуточные программы, которые используются с redux, - это redux-logger, redux-thunk и redux-saga. Обычно в redux поток действий / редукторов очень чист для обновления состояния в приложении.

Этот redux-поток имеет место, когда в приложении нет асинхронных вызовов. Но что происходит, когда мы пытаемся получить данные с сервера или связаться с внешним API? Или предположим, что вы просто хотите увидеть, что отправляется и как изменяется состояние. Нам нужен способ запустить эти побочные эффекты, не прерывая поток redux. Итак, что следует использовать для решения этих проблем? …

Да, вы правильно догадались, мы используем промежуточное программное обеспечение, чтобы эти побочные эффекты выполнялись помимо обычного потока, не блокируя обновления состояния.

Где промежуточное программное обеспечение вписывается в поток redux?

Во-первых, давайте рассмотрим нормальный шаблон redux без промежуточного программного обеспечения:

  1. Происходит событие (например, нажатие кнопки или отправка формы).
  2. Для обработки события отправляется действие.
  3. Редуктор, содержащий новое состояние, изменяет его в зависимости от отправленного действия.
  4. Новое состояние передается в приложение через реквизиты, и пользовательский интерфейс изменяется соответственно.

Добавление промежуточного программного обеспечения дает нам место для действий по отправке и позволяет запускать побочный эффект после того, как действие происходит.

Итак, наш новый шаблон redux с промежуточным программным обеспечением будет выглядеть так:

  1. Событие происходит.
  2. Действие отправлено.
  3. ПО промежуточного слоя получает действие и запускает побочные эффекты.
  4. Редуктор обновляет состояние.
  5. Пользовательский интерфейс обновляется.

Для более ясного понимания redux вы можете посетить их официальную документацию и прочитать здесь.

Вот пример, в котором регистрируются все действия и состояния:

const logger = store => next => action => {
  //logs the dispatched action
  console.log(‘dispatching’, action)
  //logs the previous state
  console.log('previous state', store.getState())
  let result = next(action)
  //logs the updated state
  console.log(‘next state’, store.getState())
  return result
}

next здесь продолжает распространение текущего действия. Важно не изменять действие и вызывать его только один раз в промежуточном программном обеспечении.

Мы можем рассматривать промежуточное ПО как конвейер:

dispatch -> middleware 1 -> middleware 2 -> ... -> reducer

Мы отправляем одно действие, оно поочередно проходит через промежуточное ПО, заканчивая редуктором.

А вот как применить его к redux store:

import { createStore, combineReducers, applyMiddleware } from ‘redux’
const reduxApp = combineReducers(reducers)
const store = createStore(
  reduxApp,
  // applyMiddleware() tells createStore() how to handle middleware
  applyMiddleware(logger)
)

Заключение

Поначалу использование промежуточного программного обеспечения в ваших приложениях может показаться немного запутанным, но оно компенсирует очень мощный инструмент для обработки побочных эффектов в вашем приложении и ускоряет и упрощает обработку кода.

использованная литература

  1. Https://expressjs.com/en/guide/using-middleware.html
  2. Https://en.wikipedia.org/wiki/Middleware
  3. Https://developer.okta.com/blog/2018/09/13/build-and-understand-express-middleware-through-examples#:~:text=Middleware%20literally%20means%20anything%20you,or% 20path)% 20 это% 20 подключено% 20to
  4. Https://redux.js.org/advanced/middleware

Надеюсь, вы поняли, что такое промежуточное ПО, для чего мы их используем.

Спасибо за прочтение !!

Удачного взлома 😄