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".

소스 정보

저장소
igorescodro/alkaa
최근 소스 활동
2026년 3월 28일 16:31
감지된 SKILL.md 언어
영어
스타
1,647
포크
164

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
2 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
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
GitHub에서 보기