# Что такое FlowEngine?

FlowEngine — это совершенно новый фронтенд-движок для no-code и low-code разработки, представленный в NocoBase 2.0. Он сочетает в себе модели (Model) и потоки (Flow) для упрощения фронтенд-логики, повышения её переиспользуемости и удобства поддержки. В то же время, используя конфигурируемость Flow, он наделяет фронтенд-компоненты и бизнес-логику возможностями no-code настройки и оркестрации.

## Почему он называется FlowEngine?

Потому что в FlowEngine свойства и логика компонентов больше не определяются статически, а управляются и приводятся в действие **потоком (Flow)**.

*   **Flow**, подобно потоку данных, разбивает логику на упорядоченные шаги (Step) и последовательно применяет их к компоненту.
*   **Engine** означает, что это движок, который управляет фронтенд-логикой и взаимодействиями.

Таким образом, **FlowEngine = Фронтенд-движок логики, управляемый потоками**.

## Что такое Model?

В FlowEngine Model — это абстрактная модель компонента, отвечающая за:

*   Управление **свойствами (Props) и состоянием** компонента;
*   Определение **метода рендеринга** компонента;
*   Размещение и выполнение **Flow**;
*   Единообразную обработку **диспетчеризации событий** и **жизненных циклов**.

Другими словами, **Model — это логический мозг компонента**, превращающий его из статического элемента в конфигурируемый и оркестрируемый динамический блок.

## Что такое Flow?

В FlowEngine **Flow — это логический поток, который обслуживает Model**.
Его назначение:

*   Разбивать логику свойств или событий на шаги (Step) и выполнять их последовательно, подобно потоку;
*   Управлять изменениями свойств, а также реакциями на события;
*   Делать логику **динамичной, конфигурируемой и переиспользуемой**.

## Как разобраться в этих концепциях?

Вы можете представить **Flow** как **поток воды**:

*   **Step — это как узел на пути потока воды**
    Каждый Step выполняет небольшую задачу (например, устанавливает свойство, запускает событие, вызывает API), подобно тому, как вода оказывает воздействие, проходя через шлюз или водяное колесо.

*   **Поток упорядочен**
    Вода течет по заданному пути от истока к устью, последовательно проходя через все Steps; аналогично, логика в Flow выполняется в определенном порядке.

*   **Поток может разветвляться и объединяться**
    Поток воды может разделяться на несколько мелких потоков или сливаться воедино; Flow также может быть разбит на несколько подпотоков или объединен в более сложные логические цепочки.

*   **Поток конфигурируем и управляем**
    Направление и объем водного потока можно регулировать с помощью шлюза; способ выполнения и параметры Flow также можно контролировать с помощью конфигурации (`stepParams`).

Подведем итог аналогии

*   **Компонент** подобен водяному колесу, которому нужен поток воды, чтобы вращаться;
*   **Model** — это основа и контроллер этого водяного колеса, отвечающий за прием воды и приведение его в действие;
*   **Flow** — это тот самый поток воды, который последовательно проходит через каждый Step, заставляя компонент постоянно меняться и реагировать.

Таким образом, в FlowEngine:

*   **Flow позволяет логике течь естественно, как поток воды**;
*   **Model же делает компонент носителем и исполнителем этого потока**.