diff --git a/docs/04_Agents/Roadmaps/Curator_Roadmap.md b/docs/04_Agents/Roadmaps/Curator_Roadmap.md index 70c8f409..b6483608 100644 --- a/docs/04_Agents/Roadmaps/Curator_Roadmap.md +++ b/docs/04_Agents/Roadmaps/Curator_Roadmap.md @@ -49,8 +49,8 @@ - [x] Tenant-Isolation (ADR-0021) und Multi-Tenant-Architektur kurz beschreiben → `docs/05_Backend/Multi_Tenant_Kurz.md` (03.04.2026) - [ ] **B-3** | `docs/06_Frontend/` aktualisieren - - [ ] ViewModel-Architektur-Muster (MVVM/UDF) verlinken - - [ ] Verweis auf `VeranstalterViewModel` als Referenz-Implementierung eintragen + - [x] ViewModel-Architektur-Muster (MVVM/UDF) verlinken → `docs/06_Frontend/MVVM_UDF_Pattern.md` (03.04.2026) + - [x] Verweis auf `VeranstalterViewModel` als Referenz-Implementierung eintragen → Code: `frontend/features/veranstalter-feature/src/commonMain/kotlin/at/mocode/veranstalter/feature/presentation/VeranstalterViewModel.kt` (03.04.2026) --- diff --git a/docs/06_Frontend/MVVM_UDF_Pattern.md b/docs/06_Frontend/MVVM_UDF_Pattern.md index 86698624..b972339c 100644 --- a/docs/06_Frontend/MVVM_UDF_Pattern.md +++ b/docs/06_Frontend/MVVM_UDF_Pattern.md @@ -1,3 +1,10 @@ +--- +type: Reference +status: ACTIVE +owner: Frontend Expert +last_update: 2026-04-03 +--- + ### MVVM + UDF (Unidirectional Data Flow) — Referenz & Vorlage Ziel: Alle ViewModels folgen einem klaren, einheitlichen Muster. Composables rendern nur `State` und senden `Intent`s. Business-Logik liegt im ViewModel, nicht in den UI-Funktionen. @@ -14,7 +21,7 @@ Ziel: Alle ViewModels folgen einem klaren, einheitlichen Muster. Composables ren #### Referenz-Implementierung: Veranstalter Dateien: -- `frontend/features/veranstalter-feature/src/commonMain/.../VeranstalterViewModel.kt` +- `frontend/features/veranstalter-feature/src/commonMain/kotlin/at/mocode/veranstalter/feature/presentation/VeranstalterViewModel.kt` - `frontend/features/veranstalter-feature/src/jvmMain/.../DefaultVeranstalterRepository.kt` - `frontend/features/veranstalter-feature/src/jvmMain/.../VeranstalterAuswahlScreen.kt` (verwendet das ViewModel) @@ -99,6 +106,10 @@ fun VeranstalterAuswahlScreen(onZurueck: () -> Unit, onWeiter: (Long) -> Unit) { - Persistenz/Netzwerk-Zugriffe laufen im Repository. Das ViewModel injiziert das Repository (später per DI). - State ist die Single Source of Truth pro Screen. +#### Siehe auch +- Weitere Beispiele: `ReiterViewModel`, `PferdeViewModel`, `PingViewModel` in `frontend/features/*/presentation/` +- Koin-Integration (VM-Erzeugung in Composables): `org.koin.compose.viewmodel.koinViewModel` + #### Vorlage für neue ViewModels 1. `data class UiState(...)` 2. `sealed interface Intent { ... }` diff --git a/docs/06_Frontend/README.md b/docs/06_Frontend/README.md index 6a4f1551..4727ef40 100644 --- a/docs/06_Frontend/README.md +++ b/docs/06_Frontend/README.md @@ -2,7 +2,7 @@ type: Reference status: ACTIVE owner: Frontend Expert -last_update: 2026-01-15 +last_update: 2026-04-03 --- # Frontend-Architektur "Meldestelle Portal" @@ -40,7 +40,9 @@ Das `frontend`-Verzeichnis ist wie folgt strukturiert, um eine klare Trennung de ## Wichtige Dokumente -* **[State-Management Strategie (UDF)](state-management-strategy.md):** Beschreibt die empfohlene Strategie für komplexe Screens. +* **[MVVM + UDF Referenz (ViewModel-Architektur)](MVVM_UDF_Pattern.md):** Verbindliches Muster für ViewModels inkl. Referenz-Implementierung `VeranstalterViewModel`. + * Referenz-Code: `frontend/features/veranstalter-feature/src/commonMain/kotlin/at/mocode/veranstalter/feature/presentation/VeranstalterViewModel.kt` +* (Alt) **State-Management Strategie (UDF)**: Wird durch obige Referenz konsolidiert/ersetzt. * **[ADR-0010: SQLDelight für Cross-Platform-Persistenz](../01_Architecture/adr/0010-sqldelight-for-cross-platform-persistence.md):** Beschreibt die Entscheidung für SQLDelight. * **[ADR-0011: Koin für Dependency Injection](../01_Architecture/adr/0011-koin-for-dependency-injection.md):** Beschreibt die Entscheidung für Koin. * **[Offline-First-Architektur](offline-first-architecture.md):** Detaillierte Beschreibung der Offline-First-Strategie.