Phase 06
Architektur
ViewModel, Repositories, Dependency Injection, Modul-Design und nachhaltige App-Architektur.
55 Artikel · Seite 1 von 3
Der Zweck von Software-Architektur
Gute Architektur macht Android-Apps wartbar und testbar. Du lernst, warum Struktur Komplexität dauerhaft unter Kontrolle hält.
Offizielle Architektur-Empfehlungen
Google definiert klare Schichtenprinzipien für Android-Apps. Dieser Artikel erklärt, welche Muster empfohlen werden und warum sie die Wartbarkeit verbessern.
Separation of Concerns – Verantwortlichkeiten klar trennen
Separation of Concerns trennt UI, Geschäftslogik und Datenzugriff klar voneinander. So bleibt Android-Code testbar, wartbar und strukturiert.
Verantwortlichkeiten der UI-Schicht
Die UI-Schicht hat zwei klar abgegrenzte Aufgaben: Zustand darstellen und Nutzer-Events weiterleiten. Wer das verinnerlicht, schreibt wartbaren Android-Code.
UI-State-Modellierung
Lerne, wie du den UI-State einer App explizit modellierst. Vorhersagbare Rendering-Logik beginnt mit klaren Zustandsdefinitionen.
UI Events: Flüchtige Aktionen sauber von Zustand trennen
UI Events trennen flüchtige Benutzeraktionen von persistentem Zustand. Sie verhindern doppelte Navigation und inkonsistente UI-Zustände.
ViewModel-Verantwortlichkeiten
Das ViewModel hält UI-Zustand vor und koordiniert Geschäftslogik. Du lernst, was hineingehört – und was nicht.
ViewModel Scope – Koroutinen konfigurationsstabil verwalten
viewModelScope bindet Koroutinen an den Lebenszyklus des ViewModels. Wenn das ViewModel gelöscht wird, werden alle laufenden Jobs automatisch abgebrochen.
StateFlow in ViewModels
StateFlow verbindet dein ViewModel sicher mit der Compose-UI. Lerne, wie du reaktive Zustandsstreams lifecycle-bewusst aussetzt.
Lifecycle-Aware Collection: Streams nur bei aktiver UI sammeln
repeatOnLifecycle koppelt deinen Flow sauber an den UI-Zustand. So sammelst du Streams nur, wenn die UI aktiv genug ist, um Updates anzuzeigen.
Zweck des Domain-Layers
Der Domain-Layer isoliert Geschäftslogik und ermöglicht deren Wiederverwendung. Lerne, wann und wie du ihn sinnvoll einsetzt.
Use Cases: Geschäftslogik sauber kapseln
Use Cases kapseln eine konkrete Businessaktion in einer eigenen Klasse. Damit bleibt deine Architektur testbar und übersichtlich.
Data Layer: Verantwortlichkeiten im Überblick
Der Data Layer trennt Datenzugriff und Caching sauber vom UI-Code. Lerne, was Repositories und Data Sources leisten.
Repository APIs
Repositories kapseln Datenquellen hinter einer klaren API. Du lernst, Methoden app-nah statt datenbank-nah zu gestalten.
Data Sources: Lokale und Remote-Daten sauber trennen
Data Sources kapseln den Zugriff auf lokale und Remote-Daten. Repositories koordinieren sie, damit der Rest der App nichts vom Speicherort wissen muss.
Model Mapping in Android
Lerne, warum du Datenmodelle an Schichtgrenzen konvertieren solltest. So vermeidest du, dass externe Formate deine gesamte App durchdringen.
Single Source of Truth: Konsistente Zustände in Android
Das Single-Source-of-Truth-Prinzip bedeutet: Ein Zustand, eine Quelle. Es verhindert Datenwidersprüche und ist die Basis für offline-fähige Android-Apps.
Offline-First-Architektur
Offline-First-Apps bleiben nutzbar, wenn das Netz ausfällt. Lerne, wie du Daten lokal speicherst, synchronisierst und Fehler resilient behandelst.
Error Boundaries: Fehler abfangen, loggen und sinnvoll anzeigen
Lerne, wo du Fehler in Android-Apps gezielt abfängst und transformierst. Klare Grenzen verbessern UX und Stabilität.
Loading State Design: Ladeanimationen ohne Kontext-Verlust
Ladeanimationen richtig designen verhindert Flackern und hält Nutzer orientiert. Skeleton Screens und Progress-Indikatoren in Compose korrekt einsetzen.
Der Zweck von Dependency Injection in Android
Dependency Injection entkoppelt Objekte von ihren Abhängigkeiten. So bleibt Code testbar und leicht wartbar.
Hilt Grundlagen: Dependency Injection in Android
Hilt vereinfacht DI in Android durch generierte Dagger-Komponenten. Du lernst Module, Scopes und Annotationen wie @Inject kennen.
Hilt Scopes: Abhängigkeiten richtig scopen
Hilt Scopes steuern, wie lange eine Abhängigkeit im Speicher lebt. Lerne, welchen Scope du wann einsetzt.
Assisted Injection: Laufzeitparameter sauber einschleusen
Manche Abhängigkeiten kennt Hilt erst zur Laufzeit. Assisted Injection verbindet injizierte Klassen mit dynamischen Parametern über typsichere Factories.