Framework и проект
Framework показывает интерфейс и управляет его поведением. Проект получает и сохраняет данные, проверяет права и выполняет действия.
| Владеет Framework | Владеет проект |
|---|---|
| Вид элементов, темы, размеры, раскладка | Содержимое страницы и тексты |
| Открыто ли меню, какое значение выбрано, какая вкладка активна | Корзина, заказ, запись в базе |
| Показ загрузки, пустого результата, ошибки | Запрос к серверу, авторизация, токены доступа |
| Клавиатура, фокус, доступное имя элемента | Роли и права пользователей |
| Событие «человек выбрал значение» | Решение, что с этим значением делать |
| Структура макета страницы | Данные, на которые макет ссылается |
В каталоге обязанности делятся так:
| Framework показывает | Проект выполняет |
|---|---|
| Поля фильтра и выбранные значения | Получает варианты фильтра и применяет запрос |
| Карточки, загрузку и сообщение об ошибке | Получает товары и сообщает результат |
| Кнопку «В корзину» и её состояния | Проверяет права и остаток, сохраняет корзину |
На практике это выглядит так. Человек нажимает «В корзину». Кнопка показывает нажатие и сообщает о действии событием. Проект проверяет остаток и права, сохраняет корзину и передаёт интерфейсу новое состояние. Framework не знает, что такое остаток, и не решает, можно ли покупать.
Из этой границы следуют два правила:
- Framework не зависит от серверной части. В нём нет кода под конкретную CMS или сервер; поэтому одна поставка работает в любом проекте.
- Проект не правит Framework. Если поставки не хватает, проект добавляет
своё рядом (свой стиль в своём слое, свой локальный компонент), а
недостающее в самом Framework исправляется в
ui-sourceи приходит следующим выпуском.