Skip to main content

write-viewmodel

Use when writing a new ViewModel or modifying an existing one in the Alkaa project. Triggers on tasks like "add a ViewModel", "create VM for X screen", "implement state handling", or "connect use case to UI".

Quellinformationen

Repository
igorescodro/alkaa
Letzte Quellaktivität
28. März 2026 um 16:31
Erkannte Sprache von SKILL.md
Englisch
Sterne
1.647
Forks
164

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
2 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
write-viewmodel
description
Use when writing a new ViewModel or modifying an existing one in the Alkaa project. Triggers on tasks like "add a ViewModel", "create VM for X screen", "implement state handling", or "connect use case to UI".
# Write ViewModel ## Overview ViewModels in Alkaa bridge domain use cases and Compose UI via cold flows and sealed state classes. They contain no business logic — only orchestration, mapping, and scope management. ## Structure 1. **Sealed State Class** — `data object` for stateless states, `data class` for states with data, `ImmutableList` for list payloads → see `references/CODE_PATTERNS.md` 2. **Flow Exposure** — Cold `Flow<ViewState>` by default; hot `StateFlow` only when multiple collectors share the same stream → see `references/CODE_PATTERNS.md` 3. **Use Case Injection** — Inject use cases as constructor parameters; never repositories or other ViewModels → see `references/CODE_PATTERNS.md` 4. **Coroutine Scope** — `applicationScope` for DB mutations that survive ViewModel destruction; `viewModelScope` for UI-bound work → see `references/CODE_PATTERNS.md` 5. **Mappers** — Dedicated mapper class injected as constructor param; never map inline → see `references/CODE_PATTERNS.md` For unit test setup and fake patterns → see `references/CODE_PATTERNS.md` and the `write-unit-tests` skill. ## Scope Rules | Situation | Scope | |-----------|-------| | DB insert / update / delete | `applicationScope.launch { }` | | Network call that should persist | `applicationScope.launch { }` | | Debounced UI updates | `viewModelScope` | | Short-lived UI-bound work | `viewModelScope` | ## Common Mistakes | Mistake | Fix | |---------|-----| | Calling repository directly | Wrap in a use case first | | Exposing `StateFlow` for a screen-scoped stream | Return cold `Flow<ViewState>` | | Mapping models inline in ViewModel | Create a `XxxMapper` class | | Using `viewModelScope` for DB writes | Use `applicationScope.launch { }` | | Depending on another ViewModel | Extract shared logic into a use case | | Testing with mocks | Write a `XxxFake` that implements the use case interface | ## Related Skills - **Fake patterns and test structure** → use `write-unit-tests` skill - **Composable and screen wiring** → use `write-composable` skill
Auf GitHub ansehen