meldestelle/client/README-CLIENT.md
2025-08-16 15:47:57 +02:00

16 KiB

đŸ–„ïž 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

# đŸ–„ïž 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

Jedes Modul hat eine umfassende Dokumentation, die Architektur, Entwicklung, Testing und Deployment abdeckt:

  • Common-UI Modul - Geteilte MVVM-Architektur, Services und GeschĂ€ftslogik
  • Desktop-App Modul - Native Desktop-Anwendung mit plattformĂŒbergreifender Distribution
  • Web-App Modul - 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

# 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

# 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

# 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:

// Geteilte Service-Schicht
class PingService(
    private val baseUrl: String,
    private val httpClient: HttpClient
) {
    suspend fun ping(): Result<PingResponse>
    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

# 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

    # Voraussetzungen ĂŒberprĂŒfen
    java -version    # Sollte JDK 21 anzeigen
    node --version   # Sollte Node.js ≄ 20 anzeigen
    
    # Erstellen und validieren
    ./gradlew :client:build
    
  2. Entwicklungsprozess

    # Ü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

    # 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:

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