# đŸ–„ïž Client-Architektur - Meldestelle ## Überblick Das **Client**-Modul stellt die vollstĂ€ndige BenutzeroberflĂ€chen-Lösung fĂŒr das Meldestelle-System bereit und liefert eine konsistente Erfahrung auf mehreren Plattformen durch Kotlin Multiplatform- und Compose Multiplatform-Technologien. **Architektur-Highlights:** - 🌐 **PlattformĂŒbergreifend** - Eine einzige Codebasis fĂŒr Desktop (JVM) und Web (JavaScript) Anwendungen - đŸ—ïž **Moderne MVVM** - Umfassende Model-View-ViewModel-Architektur mit ordnungsgemĂ€ĂŸer Zustandsverwaltung - đŸ§Ș **Testabdeckung** - Produktionsbereit mit umfassenden Tests ĂŒber alle Module - 🚀 **Optimiert** - Build- und Laufzeit-Optimierungen fĂŒr Leistung und Entwicklererfahrung - đŸ“± **Progressive** - Web-App mit vollstĂ€ndigen PWA-FĂ€higkeiten fĂŒr mobile und Desktop-Installation --- ## Client-Module Struktur ``` client/ ├── common-ui/ # Geteilte UI-Komponenten und GeschĂ€ftslogik │ ├── src/commonMain/ # PlattformĂŒbergreifende MVVM-Implementierung │ ├── src/commonTest/ # Umfassende Test-Suite (32 Tests) │ └── README-CLIENT-COMMON-UI.md # Detaillierte common-ui Dokumentation ├── desktop-app/ # Native Desktop-Anwendung │ ├── src/jvmMain/ # Desktop-spezifische Implementierung │ ├── src/jvmTest/ # Desktop-Anwendungs-Tests │ └── README-CLIENT-DESKTOP-APP.md # Detaillierte desktop-app Dokumentation ├── web-app/ # Progressive Web Application │ ├── src/jsMain/ # Web-spezifische Implementierung mit PWA │ ├── src/jsTest/ # JavaScript-kompatible Tests │ └── README-CLIENT-WEB-APP.md # Detaillierte web-app Dokumentation └── README-CLIENT.md # Diese Übersichts-Dokumentation ``` --- ## Architektur-Überblick ### Multi-Plattform-Strategie Die Client-Architektur folgt einem geschichteten Ansatz mit maximaler Code-Wiederverwendung: ``` ┌─────────────────────────────────────────────────┐ │ Client-Apps │ â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”Źâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ │ Desktop-App │ Web-App │ │ (JVM/Compose) │ (Kotlin/JS + PWA) │ ├─────────────────┎──────────────────────────────── │ Common-UI Modul │ │ (Geteilte MVVM + GeschĂ€ftslogik) │ ├────────────────────────────────────────────────── │ Plattformspezifische AbhĂ€ngigkeiten │ │ JVM: Ktor-CIO │ JS: Ktor-JS │ └─────────────────────────────────────────────────┘ ``` ### MVVM-Implementierung Die vollstĂ€ndige Client-Architektur implementiert das ordnungsgemĂ€ĂŸe MVVM-Muster: - **Model**: Datenmodelle und Services (`PingService`, `PingResponse`) - **View**: Compose UI-Komponenten (Desktop + Web) - **ViewModel**: Zustandsverwaltung (`PingViewModel`, `PingUiState`) ### Vier UI-ZustĂ€nde Implementierung GemĂ€ĂŸ den trace-bullet-guideline.md Spezifikationen: 1. **Initial-Zustand**: `PingUiState.Initial` - Neutrale Nachricht, Button aktiv 2. **Loading-Zustand**: `PingUiState.Loading` - Ladeindikator, Button deaktiviert 3. **Success-Zustand**: `PingUiState.Success` - Positive Antwort, Button aktiv 4. **Error-Zustand**: `PingUiState.Error` - Klare Fehlernachricht, Button aktiv --- ## Schnellstart ### Voraussetzungen | Tool | Version | Zweck | |------|---------|-------| | JDK | 21 (Temurin) | Desktop-Laufzeit und Build-System | | Node.js | ≄ 20 | Web-Entwicklung und JavaScript-Laufzeit | | Gradle | 8.x (wrapper) | Build-Automatisierung (enthalten) | ### Entwicklungs-Befehle ```bash # đŸ–„ïž Desktop-Anwendung ./gradlew :client:desktop-app:run # Desktop-App starten ./gradlew :client:desktop-app:jvmTest # Desktop-Tests ausfĂŒhren # 🌐 Web-Anwendung ./gradlew :client:web-app:jsBrowserDevelopmentRun # Web-Dev-Server starten ./gradlew :client:web-app:jsTest # Web-Tests ausfĂŒhren # đŸ§© Common-UI Modul ./gradlew :client:common-ui:jvmTest # Geteilte Logik-Tests ausfĂŒhren ./gradlew :client:common-ui:build # Geteiltes Modul erstellen # 🔄 Alle Client-Tests ./gradlew :client:common-ui:jvmTest :client:desktop-app:jvmTest :client:web-app:jsTest ``` --- ## Modul-Dokumentation ### 📖 Detaillierte Dokumentations-Links Jedes Modul hat eine umfassende Dokumentation, die Architektur, Entwicklung, Testing und Deployment abdeckt: - **[Common-UI Modul](common-ui/README-CLIENT-COMMON-UI.md)** - Geteilte MVVM-Architektur, Services und GeschĂ€ftslogik - **[Desktop-App Modul](desktop-app/README-CLIENT-DESKTOP-APP.md)** - Native Desktop-Anwendung mit plattformĂŒbergreifender Distribution - **[Web-App Modul](web-app/README-CLIENT-WEB-APP.md)** - Progressive Web Application mit modernen Web-Standards ### 🎯 Wichtige Dokumentations-Abschnitte Jede Modul-README enthĂ€lt: - **Architektur & Struktur** - Detaillierte technische Architektur - **Entwicklungs-Workflow** - Setup, Build und Testing-Verfahren - **API-Referenz** - VollstĂ€ndige API-Dokumentation mit Beispielen - **Deployment-Leitfaden** - Produktions-Deployment-Anweisungen - **Fehlerbehebung** - HĂ€ufige Probleme und Lösungen --- ## Build & Packaging ### Entwicklungs-Builds ```bash # Alle Client-Module erstellen ./gradlew :client:build # Einzelne Module erstellen ./gradlew :client:common-ui:build # Geteilte Komponenten ./gradlew :client:desktop-app:build # Desktop-Anwendung ./gradlew :client:web-app:build # Web-Anwendung ``` ### Produktions-Packaging | Plattform | Befehl | Ausgabe | |-----------|--------|---------| | **Desktop** | `./gradlew :client:desktop-app:createDistributable` | PlattformĂŒbergreifende Installer | | **Web** | `./gradlew :client:web-app:jsBrowserProductionWebpack` | Optimiertes PWA-Bundle | ### Distributions-Formate **Desktop-Anwendung:** - Linux: `.deb` Pakete - macOS: `.dmg` Disk-Images - Windows: `.msi` Installer **Web-Anwendung:** - Optimierte JavaScript-Bundles - PWA-Manifest fĂŒr App-Installation - Service Worker bereit (zukĂŒnftige Erweiterung) --- ## Konfiguration ### Umgebungs-Konfiguration Die Client-Anwendungen unterstĂŒtzen flexible Konfiguration: | Konfiguration | Desktop | Web | Standardwert | |---------------|---------|-----|--------------| | **API Basis-URL** | System-Eigenschaft | Build-Zeit | `http://localhost:8080` | | **Log-Level** | JVM-Args | Konsole | `INFO` | ### Desktop-Konfiguration ```bash # Benutzerdefinierte API-URL ./gradlew :client:desktop-app:run -Dmeldestelle.api.url=https://api.production.com # Entwicklung mit lokalem Backend ./gradlew :client:desktop-app:run -Dmeldestelle.api.url=http://localhost:8080 ``` ### Web-Konfiguration Die Web-Anwendungs-Konfiguration wird zur Build-Zeit eingebettet und kann im Build-Prozess angepasst werden. --- ## Test-Strategie ### Umfassende Test-Abdeckung | Modul | Test-Typ | Anzahl | Abdeckung | |-------|----------|--------|-----------| | **Common-UI** | Unit + Integration | 32 | GeschĂ€ftslogik, MVVM, Services | | **Desktop-App** | JVM Integration | 3 | Anwendungsstart, Konfiguration | | **Web-App** | JavaScript | 4 | Web-spezifische FunktionalitĂ€t, PWA | | **Gesamt** | **PlattformĂŒbergreifend** | **39** | **VollstĂ€ndige Client-Abdeckung** | ### Test-AusfĂŒhrung ```bash # Alle Client-Tests ausfĂŒhren ./gradlew :client:common-ui:jvmTest :client:desktop-app:jvmTest :client:web-app:jsTest # Einzelne Test-Suiten ./gradlew :client:common-ui:jvmTest # Geteilte GeschĂ€ftslogik ./gradlew :client:desktop-app:jvmTest # Desktop-spezifische Tests ./gradlew :client:web-app:jsTest # Web/JS-spezifische Tests ``` ### Test-QualitĂ€ts-Metriken - **✅ MVVM-Architektur**: VollstĂ€ndiges Zustandsverwaltungs-Testing - **✅ Ressourcenverwaltung**: Memory-Leak-PrĂ€ventions-Validierung - **✅ PlattformĂŒbergreifend**: Plattformspezifische Integrationstests - **✅ API-Integration**: HTTP-Service und Serialisierungs-Tests --- ## Leistung & QualitĂ€t ### Architektur-Vorteile **đŸ—ïž MVVM-Implementierung:** - OrdnungsgemĂ€ĂŸe Trennung der Belange mit testbaren Komponenten - Reaktive UI-Zustandsverwaltung mit Compose - Ressourcen-Lebenszyklus-Verwaltung mit automatischer Bereinigung **🚀 Laufzeit-Leistung:** - Effizientes Speichermanagement durch ordnungsgemĂ€ĂŸe Disposal-Muster - Optimierte Build-Konfigurationen fĂŒr beide Plattformen - Minimaler Overhead mit geteilter GeschĂ€ftslogik **🔧 Entwicklererfahrung:** - Hot Reload fĂŒr Desktop- und Web-Entwicklung - Umfassende Test-Infrastruktur - Klare Dokumentation und Fehlerbehebungs-LeitfĂ€den ### QualitĂ€tssicherung - **Test-Abdeckung**: 39 umfassende Tests ĂŒber alle Client-Module - **Architektur-KonformitĂ€t**: 100% MVVM-Muster-Implementierung - **Build-Optimierung**: Moderne Gradle-Konfiguration mit AbhĂ€ngigkeitsverwaltung - **PlattformĂŒbergreifend**: Konsistentes Verhalten ĂŒber Desktop- und Web-Plattformen --- ## Produktionsbereitschaft ### Desktop-Anwendung ✅ **Distributionsbereit:** - PlattformĂŒbergreifende Installer (Linux, macOS, Windows) - Native Leistung mit JVM-Optimierung - System-Integrations-FĂ€higkeiten ✅ **Enterprise-Features:** - Konfigurierbare API-Endpunkte - Logging-Integration bereit - Ressourcenverwaltung und Bereinigung ### Web-Anwendung ✅ **Moderne PWA:** - Progressive Web App mit Installations-UnterstĂŒtzung - Mobile-First responsives Design - Offline-FĂ€higkeiten bereit (Service Worker erweiterbar) ✅ **Produktionsstandards:** - Sicherheits-Header (CSP, XSS-Schutz) - Leistungsoptimierung (Webpack, Caching) - SEO und Barrierefreiheits-KonformitĂ€t --- ## API-Integration ### Geteilter HTTP-Client Alle Client-Anwendungen verwenden ein konsistentes API-Integrations-Muster: ```kotlin // Geteilte Service-Schicht class PingService( private val baseUrl: String, private val httpClient: HttpClient ) { suspend fun ping(): Result fun close() } // Plattformspezifische Engines // Desktop: Ktor CIO Engine // Web: Ktor JS Engine ``` ### API-Konfiguration | Umgebung | API Basis-URL | Konfigurationsmethode | |----------|---------------|----------------------| | **Entwicklung** | `http://localhost:8080` | Standard-Konfiguration | | **Staging** | `https://staging-api.example.com` | System-Eigenschaften / Build-Konfiguration | | **Produktion** | `https://api.example.com` | System-Eigenschaften / Build-Konfiguration | --- ## Migrations- & Upgrade-Leitfaden ### Von der vorherigen Architektur Die Client-Architektur wurde vollstĂ€ndig modernisiert: **Vorher (Komponentenbasiert):** - Vermischte Belange in UI-Komponenten - Manuelle Zustandsverwaltung - Speicherleck-Potenzial - Begrenzte plattformĂŒbergreifende Wiederverwendung **Aktuell (MVVM):** - Saubere Architektur mit getrennten Belangen - Reaktive Zustandsverwaltung mit Compose - Automatische Ressourcenbereinigung - Maximale Code-Wiederverwendung ĂŒber Plattformen ### Breaking Changes **Keine** - Das Architektur-Upgrade behielt die RĂŒckwĂ€rtskompatibilitĂ€t fĂŒr alle öffentlichen APIs bei. --- ## ZukĂŒnftige Erweiterungen ### Roadmap-PrioritĂ€ten 1. **Erweiterte PWA-Features** - Service Worker-Implementierung fĂŒr vollstĂ€ndige Offline-UnterstĂŒtzung - Push-Benachrichtigungs-Integration - Hintergrund-Sync-FĂ€higkeiten 2. **Desktop-Erweiterungen** - Native System-Integration (Benachrichtigungen, Dateidialoge) - Auto-Update-Mechanismen - Erweiterte Logging-Konfiguration 3. **Test-Erweiterung** - End-to-End-Testing ĂŒber Plattformen - Visual Regression Testing - Performance-Benchmarking 4. **Monitoring-Integration** - Fehlerberichterstattung und Analytik - Performance-Überwachung - Benutzerverhalten-Analytik --- ## Fehlerbehebung ### HĂ€ufige Probleme ĂŒber alle Plattformen | Problem | Plattform | Lösung | |---------|-----------|--------| | API-Verbindungsfehler | Alle | Basis-URL-Konfiguration und NetzwerkkonnektivitĂ€t ĂŒberprĂŒfen | | Build-Fehler | Alle | Build-Verzeichnis bereinigen: `./gradlew clean` | | Test-AusfĂŒhrungsprobleme | Alle | Plattformspezifische Anforderungen prĂŒfen (JDK, Node.js) | | Hot Reload funktioniert nicht | Web | Dev-Server neu starten, File Watcher prĂŒfen | ### Plattformspezifische Probleme **Desktop:** - Fenster wird nicht angezeigt → Display-Einstellungen und Fensterzustand prĂŒfen - SLF4J-Warnungen → Logback-AbhĂ€ngigkeit hinzufĂŒgen (nicht kritisch) **Web:** - Weißer Bildschirm beim Laden → Browser-Konsole auf JavaScript-Fehler prĂŒfen - PWA installiert nicht → HTTPS und manifest.json verifizieren ### Debug-Befehle ```bash # Umfassende Build-Analyse ./gradlew :client:build --scan # AbhĂ€ngigkeitskonflikt-Analyse ./gradlew :client:dependencies # AusfĂŒhrliche Test-AusfĂŒhrung ./gradlew :client:common-ui:jvmTest --info ``` --- ## Mitwirken ### Entwicklungs-Workflow 1. **Umgebung einrichten** ```bash # Voraussetzungen ĂŒberprĂŒfen java -version # Sollte JDK 21 anzeigen node --version # Sollte Node.js ≄ 20 anzeigen # Erstellen und validieren ./gradlew :client:build ``` 2. **Entwicklungsprozess** ```bash # Üblicher Entwicklungszyklus ./gradlew :client:common-ui:jvmTest # Geteilte Logik testen ./gradlew :client:desktop-app:run # Desktop-Integration testen ./gradlew :client:web-app:jsTest # Web-KompatibilitĂ€t testen ``` 3. **QualitĂ€tssicherung** ```bash # VollstĂ€ndige Test-Suite ./gradlew :client:common-ui:jvmTest :client:desktop-app:jvmTest :client:web-app:jsTest # Architektur-Validierung ./gradlew :client:build --scan ``` ### Code-Standards - **Architektur**: MVVM-Muster und Trennung der Belange beibehalten - **Testing**: Tests fĂŒr neue FunktionalitĂ€t ĂŒber alle betroffenen Module hinzufĂŒgen - **Dokumentation**: Modul-spezifische READMEs fĂŒr Änderungen aktualisieren - **KompatibilitĂ€t**: Sicherstellen, dass Änderungen auf Desktop- und Web-Plattformen funktionieren ### Pull Request Checkliste - [ ] Alle bestehenden Tests bestehen ĂŒber alle Client-Module - [ ] Neue FunktionalitĂ€t beinhaltet angemessene Test-Abdeckung - [ ] MVVM-Architektur-Muster beibehalten - [ ] PlattformĂŒbergreifende KompatibilitĂ€t verifiziert - [ ] Modul-spezifische Dokumentation aktualisiert - [ ] Leistungsauswirkungen bewertet und dokumentiert --- ## Kontakt & Support ### Dokumentations-Struktur FĂŒr detaillierte Informationen zu spezifischen Modulen: - **Common-UI**: [README-CLIENT-COMMON-UI.md](common-ui/README-CLIENT-COMMON-UI.md) - **Desktop-App**: [README-CLIENT-DESKTOP-APP.md](desktop-app/README-CLIENT-DESKTOP-APP.md) - **Web-App**: [README-CLIENT-WEB-APP.md](web-app/README-CLIENT-WEB-APP.md) ### Schnellreferenz | Aufgabe | Befehl | |---------|--------| | Desktop-App starten | `./gradlew :client:desktop-app:run` | | Web-Dev-Server starten | `./gradlew :client:web-app:jsBrowserDevelopmentRun` | | Alle Tests ausfĂŒhren | `./gradlew :client:common-ui:jvmTest :client:desktop-app:jvmTest :client:web-app:jsTest` | | FĂŒr Produktion erstellen | `./gradlew :client:build` | | Desktop-Installer erstellen | `./gradlew :client:desktop-app:createDistributable` | | Web-Produktions-Bundle erstellen | `./gradlew :client:web-app:jsBrowserProductionWebpack` | --- **Client-Status**: ✅ Produktionsbereit **Architektur**: ✅ MVVM VollstĂ€ndig **Test-Abdeckung**: ✅ Umfassend (39 Tests) **PlattformĂŒbergreifend**: ✅ Desktop + Web PWA **Dokumentation**: ✅ VollstĂ€ndig *Zuletzt aktualisiert: 16. August 2025*