ADR-UI-013. Паттерн страницы фичи

ADR Версия: 0.1 accepted

Страницы распадаются на повторяющиеся форматы (грид, карточка, форма) плюс специфичные экраны. Фиксируем ядро паттерна — per-page service и тонкий компонент; детали типовых форматов дописываются в этот ADR по мере появления соответствующих base-компонентов.

⟨/⟩ Исходник

1. Контекст и постановка задачи

Если каждый собирает страницу по-своему — нет единообразия загрузки, состояния, ошибок. Нужен единый каркас страницы фичи: связка «страница ↔ её сервис», формат состояния, индикаторы загрузки, показ уведомлений.

На текущем этапе base-компоненты (таблица, модалка, дровер, тост) ещё не готовы, поэтому фиксируем ядро паттерна; детали типовых форматов дописываются сюда по мере их появления.

2. Драйверы решения

  1. Единообразие — одинаковые страницы ведут себя одинаково.
  2. Локальность — состояние и логика страницы живут рядом со страницей.
  3. Тестируемость — per-page service изолируется как обычный класс.
  4. Готовность к codegen — стабильные правила для будущих генераторов страниц.

3. Рассмотренные варианты

4. Решение

Выбран Вариант B.

4.1. Ядро (принято сейчас)

Per-page service — обязателен для нетривиальной страницы; регистрируется в providers страницы:

Тривиальная страница может обойтись без per-page service.

Индикаторы загрузки — сигналы (loading, submitting) в per-page service; шаблон реагирует через @if.

Уведомления (тосты) — только через сервис-обёртку NotifyToast (единый стиль и место конфигурации); прямые вызовы запрещены. Реализация сервиса — при появлении base-тоста.

4.2. Типовые форматы (концепция; детали — по мере появления base-компонентов)

4.3. Чего не делаем

5. Положительные следствия

6. Отрицательные следствия и компромиссы

7. Проверка

8. Открытые вопросы / отложено (дополнить при появлении base-компонентов)

Связанные артефакты

Документы