Русская Википедия:Flux-архитектура

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

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

Согласно замыслу создателей и несмотря на то, что Facebook предоставил реализацию Flux в дополнение к React, Flux не является ещё одним веб-фреймворком, а является архитектурным решением.

Основные понятия

Основной отличительной особенностью Flux является односторонняя направленность передачи данных между компонентами Flux-архитектуры. Архитектура накладывает ограничения на поток данных, в частности, исключая возможность обновления состояния компонентов самими собой. Такой подход делает поток данных предсказуемым и позволяет легче проследить причины возможных ошибок в программном обеспеченииШаблон:Sfn.

В минимальном варианте Flux-архитектура может содержать три слоя, взаимодействующие по порядкуШаблон:Sfn:

  • Actions (действия)
  • Stores (хранилища)
  • Views (представления)

Хотя обычно между действиями и хранилищами добавляют Dispatcher (диспетчер),[1].

В первую очередь Flux работает с информационной архитектурой, которая затем отражается в архитектуре программного обеспечения, поэтому уровень представлений слабо зацеплен с другими уровнями системыШаблон:Sfn.

Действия

Действия (Шаблон:Lang-en) — выражение событий (часто для действий используются просто имена — строки, содержащие некоторый «глагол»). Диспетчеры передают действия нижележащим компонентам (хранилищам) по одному. Новое действие не передаётся пока предыдущее полностью не обработано компонентами. Действия из-за работы источника действия, например, пользователя, поступают асинхронно, но их диспетчеризация является синхронным процессомШаблон:SfnШаблон:Sfn. Кроме имени (Шаблон:Lang-en), действия могут иметь полезную нагрузку (Шаблон:Lang-en), содержащую относящиеся к действию данныеШаблон:Sfn.

Диспетчер

Диспетчер (Шаблон:Lang-en) предназначен для передачи действий хранилищам. В упрощённом варианте диспетчер может вообще не выделяться, как единственный на всё приложение. В диспетчере хранилища регистрируют свои функции обратного вызова (callback) и зависимости между хранилищамиШаблон:Sfn.

Хранилища

Хранилище (Шаблон:Lang-en) является местом, где сосредоточено состояние (Шаблон:Lang-en) приложения. Остальные компоненты, согласно Flux, не имеют значимого (с точки зрения архитектуры) состояния. Изменение состояния хранилища происходит строго на основе данных действия и старого состояния хранилищаШаблон:Sfn (см. чистая функция).

Представления

Представление (Шаблон:Lang-en) — компонент, обычно отвечающий за выдачу информации пользователю. Во Flux-архитектуре, которая может технически не касаться внутреннего устройства представлений вообще, это — конечная точка потоков данных. Для информационной архитектуры важно только, что данные попадают в систему (то есть, обратно в хранилища) только через действияШаблон:Sfn.

Основные отличительные особенности

  • Синхронность: все методы обратного вызова, зарегистрированные для каждого действия, синхронны в исполнении, само же действие может вызываться источником асинхронно.
  • Инверсия управления: поток управления передается соответствующему хранилищу и целевой функции обратного вызова.
  • Семантические действия: действие, вызываемое источником, содержит смысловую информацию, позволяющую соответствующему хранилищу выбрать правильный метод выполнения.
  • Отсутствие каскадов действий: Flux запрещает каскадные (вложенные) действия.Шаблон:Sfn

Сравнение

В сравнении с широко используемом, в том числе в веб-программировании, шаблоном «издатель — подписчик», Flux предлагает статическую структуру передачи сообщений, при которой сообщение получает каждый компонент. Компонент решает, что делать с этим сообщением. Это позволяет обойти некоторые архитектурные проблемы «издателя — подписчика», связанные с порядком оповещения компонентов при добавлении новых компонентов (проблемы масштабирования), а также с дополнительной сложностью, связанной с подпиской и отказом от подписки в течение жизненного цикла компонентов, при котором возможна потеря значимых для компонента сообщенийШаблон:Sfn.

Реализации

В настоящее время одной из наиболее популярных реализаций Flux-архитектуры является библиотека Redux. Кроме того, Facebook поставляет программный модуль под названием Flux, реализующий в числе прочего диспетчер, для использования совместно с ReactJS.

Другой реализацией Flux является Fluxxor, разработанный Брандоном Тилли (Шаблон:Lang-en)Шаблон:Sfn, а также RefluxШаблон:Sfn.

См. также

Примечания

Шаблон:Примечания

Литература

Ссылки

Шаблон:Нет иллюстрации