mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-11-13 17:08:20 +00:00
docs: update architecture idiom
This commit is contained in:
@@ -264,3 +264,23 @@ i18n-подписи → тест в `registry-schema.test.ts`.
|
||||
Ожидаемый минимум проверок: `pnpm --dir web check` и `pnpm --dir web test`; для
|
||||
инструмента, меняющего пользовательский поток, — e2e (см. раздел 3
|
||||
`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)` без
|
||||
монтирования компонента.
|
||||
|
||||
Reference in New Issue
Block a user