Личный кабинет
Концепция State - Application - View
Основные принципы
-
Представление это функция от состояния приложения
-
Логика приложения и состояние полностью независимы от представления
-
Приложение всегда синглтон
-
Приложение имеет ссылку на состояние и умеет им управлять
-
Компоненты напрямую взаимодействуют с приложением
Data First Application
Данные представлены в виде одного большого иммутабельного и персистентного объекта.
Подробнее:

State не содержит локальные состояния компонентов.
Компоненты не хранят локальное состояние.
Application Layer
Вся логика приложения сконцентрирована вокруг концепции "Signals". Прослойка логики может получать сообщения от источников сигналов и изменять состояние.
Подробнее:
Cигнал это универсальное событие системы.
В отличии от классического подхода с событиями, сигналы имеют четкую структуру действий.

В отличии от классических подходов с событиями из компонентов, сигналы могут поступать из любой точки системы. Будь то клик в элемент, смена url или же появление нового значения в localStorage.
Сигналы это универсальные события которые имеют четкую конфигурацию синхронных и асинхронных функций (ака actions) которые должны быть вызваны при срабатывании сигнала.
Каждая функция в рамках сигнала имеет доступ к состоянию приложения, и может его модифицировать.


View Layer
Прослойка представления реализованна на catberry.js
Подробнее:
Catberry Stores
Хранилища выступают в виде "зрителей" состояния.

При изменении указаных данных в State, хранилище уведомит зависимые компоненты о инвалидации состояния.
Catberry Stores
Хранилища подготавливают шаблонные данные. Так как в State хранится идеальное состояние данных, то в хранилищах мы создаем View-Specific данные.

Catberry Component
Компоненты самая легковесная часть системы. В catberry древовидная система компонентов. Все компоненты отрисовываются рекурсивно. Компонент содержит шаблон и биндинг к дом нодам в которых "сигналит" события.

Page Life Cycle
1. Пользователь запрашивает страницу на сервере.
2. Находим сигнал который соответствует этой странице
3. Вызываем все actions и наполняем состояние
4. Отрисовываем приложение и отдаем в браузер.
5. В браузере помимо разметки загружаем состояние сгенерированное на сервере и запускаем клиентское приложение
6. Ожидаем сигналы от разных источников (клики, вводы текста, смена url) и изменяем состояние в рамках actions сигналов.
7. После изменения состояния приложения приводим UI к этому состоянию.
BONUS
deck
By Kirill Kaysarov
deck
- 720