Личный кабинет

Концепция 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