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`; для
|
Ожидаемый минимум проверок: `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)` без
|
||||||
|
монтирования компонента.
|
||||||
|
|||||||
Reference in New Issue
Block a user