Граница ответственности
Framework отвечает за форму интерфейса: раскрывает Recipe, проверяет Document, экранирует текст, вызывает рендереры типов и перечисляет нужные ресурсы. Проект отвечает за чтение данных, права, маршруты, кеш, сохранение, публикацию и действия пользователя.
| Делает Framework | Делает проект (продукт) |
|---|---|
| раскрывает Recipe по уже разрешённым входам | читает данные из базы, API, системы управления |
| проверяет Document, экранирует текст | проверяет права доступа |
| вызывает рендереры типов, перечисляет ресурсы | выбирает маршруты и адреса |
| показывает загрузку, пустое состояние, ошибку | кеширует, сохраняет, публикует, откатывает |
| сообщает зависимости | обрабатывает действия пользователя |
Эту границу определяют до подключения макета к приложению. Она не даёт случайно перенести пароль, запрос к базе или проверку прав в JSON, который может увидеть клиент.
Пример: в каталоге Framework показывает заголовок, фильтры и карточки. Проект получает товары, скрывает недоступные цены и обрабатывает «Добавить в корзину». Макет описывает расположение этих частей, но не решает, кому разрешена покупка и какой остаток хранится на складе.
Рендерер получает уже готовый Document и во время вывода не запрашивает новых данных, поэтому один и тот же результат воспроизводится в браузере и на сервере (Рендерер не ходит за данными).