docs: update architecture idiom

This commit is contained in:
2026-10-10 04:31:58 +05:00
parent 551da338f3
commit 6d683c1d75
+20
View File
@@ -264,3 +264,23 @@ i18n-подписи → тест в `registry-schema.test.ts`.
Ожидаемый минимум проверок: `pnpm --dir web check` и `pnpm --dir web test`; для Ожидаемый минимум проверок: `pnpm --dir web check` и `pnpm --dir web test`; для
инструмента, меняющего пользовательский поток, — e2e (см. раздел 3 инструмента, меняющего пользовательский поток, — e2e (см. раздел 3
`docs/quality-gates.md`). `docs/quality-gates.md`).
## 9. Идиома: вынос логики компонента в `*.svelte.ts`
Крупный компонент-оркестратор (образец — `SchemaToolView.svelte`) держит в себе
только разметку, эффекты и пропсы; исполняемая логика живёт в модуле рядом
(`schema-tool-runner.svelte.ts`). Форма модуля продиктована лимитом
`max-lines-per-function` (100 строк, `web/eslint.config.js`): фабрика
`create*(ctx)` не вмещает все действия замыканиями, поэтому:
- состояние — один `$state`-объект (`RunnerState`), созданный внутри фабрики (не
модульный уровень — состояние на экземпляр компонента);
- действия — модульные функции `action(state, ctx)`; фабрика только создаёт
состояние и возвращает геттеры + привязанные вызовы;
- зависимости от компонента — `ctx` с ленивыми геттерами (`steps: () => steps`),
чтобы не копировать реактивные значения;
- компонент читает состояние через `$derived`-алиасы, пишет — только методами
фабрики.
Побочный плюс: действия тестируются как чистые функции над `(state, ctx)` без
монтирования компонента.