digital-garden/_inbox/Событийно-ориентированное программирование.md

3.7 KiB
Raw Blame History

aliases tags date zero-link parents linked
event-driven
зрелость/🌱
2024-03-19
00 Архитектура ПО

Событийно-ориентированное программирование — это парадигма программирования, в которой поток программы определяется асинхронными событиями, такими как действия пользователя, сообщения от других программ или внешних устройств. В этом подходе основное внимание уделяется обработке событий.

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

Ключевыми элементами событийно-ориентированного программирования являются:

  1. События (Events): Это действия или происшествия, которые происходят в системе или программе, например, нажатие кнопки на пользовательском интерфейсе или публикация кафка-сообщения сервисом в кафку
  2. Обработчики событий (Event Handlers): Это части кода, которые "слушают" определенные события и выполняются, когда эти события происходят. Обработчик события может быть функцией или методом или отдельным сервисом, который вызывается в ответ на событие.
  3. Цикл обработки событий (Event Loop): Во многих событийно-ориентированных системах существует цикл событий, который постоянно ожидает поступления новых событий и направляет их соответствующим обработчикам.
  4. Очередь событий (Event Queue): В системах с высокой нагрузкой или когда события могут возникать одновременно, события могут быть помещены в очередь для последовательной обработки.

Какие задачи хорошо решает такая архитектура:

  • Запросы для которых не нужна мгновенная реакция. Например, загрузка и парсинг большого XML файла.

Основные компоненты архитектуры:

Преимущества:

  • Компоненты изолированы и позволяют делать доработку каждого без влияния на остальные части системы
  • Простота развертывания
  • Высокая производительность. Позволяет выполнять параллельные асинхронные операции.
  • Хорошо масштабируется

Недостатки:

  • Сложно тестировать
  • Сложно развивать из-за ярко выраженной ассинхронности