0Pricing
Android Academy · Lektion

Repository-Pattern

Trennen Sie mit dem Repository-Pattern den Datenzugriff von der UI. Koordinieren Sie Room-Datenbank und Netzwerk-API als zentrale Wahrheitsquellen.

Repository-Pattern ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 6. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Android Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Android Academy-Kurs umfasst insgesamt 6 Lektionen.

Warum ein Repository?

Wenn Ihre App wächst, kann das ViewModel mit Code für den Datenzugriff überladen werden (Room-Abfragen, Retrofit-Aufrufe, SharedPreferences-Lesevorgänge).

Das Repository-Muster kapselt den gesamten Datenzugriff hinter einer einzigen Klasse. Das ViewModel kommuniziert nur mit dem Repository – es spielt keine Rolle, woher die Daten stammen.

Die Architekturebenen

Die empfohlene Android-Architektur besteht aus drei Ebenen:

  • UI-Ebene — Activity/Fragment zeigt Daten an und sendet Benutzerereignisse
  • ViewModel — verwaltet den Zustand, verarbeitet Ereignisse und ruft das Repository auf
  • Repository — ruft Daten aus Room (lokal) oder Retrofit (entfernt) ab und entscheidet, welche Quelle verwendet wird

Ein einfaches Repository

Erstellen Sie eine Repository-Klasse, die Ihr DAO und Ihre Remote-API kapselt:

class NoteRepository(private val dao: NoteDao) {

    // Expose a Flow that emits whenever data changes
    val allNotes = dao.getAllNotes()

    suspend fun insert(note: Note) {
        dao.insert(note)
    }

    suspend fun delete(note: Note) {
        dao.delete(note)
    }

    suspend fun update(note: Note) {
        dao.update(note)
    }
}

Das ViewModel verwendet das Repository

Das ViewModel ruft Daten aus dem Repository ab – nicht direkt aus dem DAO:

class NoteViewModel(private val repo: NoteRepository) : ViewModel() {

    val notes = repo.allNotes  // Flow from Repository

    fun addNote(title: String, body: String) {
        viewModelScope.launch {
            repo.insert(Note(title = title, body = body))
        }
    }

    fun deleteNote(note: Note) {
        viewModelScope.launch {
            repo.delete(note)
        }
    }
}

Cache-First-Strategie

Ein häufig verwendetes Repository-Muster ist Cache-First. Zeigen Sie lokal zwischengespeicherte Daten sofort an und aktualisieren Sie sie anschließend im Hintergrund über das Netzwerk:

  • 1. Zwischengespeicherte Daten sofort aus Room ausgeben
  • 2. Aktuelle Daten von der API abrufen
  • 3. In Room speichern — Flow wird automatisch aktualisiert

So erhalten Sie kurze Ladezeiten und letztlich aktuelle Daten.

Implementierung von Cache-First

Aktualisieren Sie die lokale Datenbank über das Netzwerk:

class ProductRepository(
    private val dao: ProductDao,
    private val api: ProductApiService
) {
    // Room Flow emits local data immediately
    val products = dao.getAllProducts()

    // Call this to sync with the server
    suspend fun refresh() {
        try {
            val remoteProducts = api.getProducts()
            dao.insertAll(remoteProducts)  // overwrites local cache
        } catch (e: Exception) {
            // Network failed — cached data is still shown
        }
    }
}

ViewModelFactory

Wenn ein ViewModel Konstruktorparameter besitzt, benötigen Sie eine ViewModelFactory, um es zu erstellen:

class NoteViewModelFactory(
    private val repo: NoteRepository
) : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        @Suppress("UNCHECKED_CAST")
        return NoteViewModel(repo) as T
    }
}

// In Activity:
val db = NoteDatabase.getInstance(this)
val repo = NoteRepository(db.noteDao())
val factory = NoteViewModelFactory(repo)
val viewModel = ViewModelProvider(this, factory)[NoteViewModel::class.java]

Hilt für Dependency Injection

Repository- und ViewModel-Instanzen manuell zu erstellen, wird in großen Apps schnell mühsam. Hilt (Dependency Injection) automatisiert diesen Vorgang:

  • Annotieren Sie Ihre Klassen mit @HiltViewModel und @Inject
  • Hilt erstellt und stellt Abhängigkeiten automatisch bereit
  • Der gesamte Boilerplate-Code für Factorys entfällt

Zusammenfassung der Vorteile

Das Repository-Muster bietet:

  • Testbarkeit — Ersetzen Sie die echte API für Unit-Tests durch eine Fake-Implementierung
  • Trennung von Zuständigkeiten — Das ViewModel weiß nicht, ob die Daten lokal oder entfernt vorliegen
  • Single Source of Truth — Room ist immer die Quelle; die API aktualisiert sie lediglich
  • Flexibilität — Fügen Sie Caching, Seitennummerierung oder neue Datenquellen hinzu, ohne das ViewModel anzupassen

Schnelltest

Was ist die wichtigste Aufgabe des Repositorys in der Android-Architektur?

Zusammenfassung: Repository-Muster

Sie verstehen jetzt die empfohlene Android-Architektur:

  • UI → ViewModel → Repository → (Room / Retrofit)
  • Das Repository ist die Single Source of Truth
  • Cache-First: Lokale Daten sofort anzeigen und im Hintergrund aktualisieren
  • Verwenden Sie ViewModelFactory, wenn das ViewModel Konstruktorparameter besitzt
  • Hilt automatisiert Dependency Injection in größeren Apps

Letzter Kurs: Networking & Feinschliff — Retrofit, Bilder und Veröffentlichung.

Häufig gestellte Fragen

Ist die Lektion „Repository-Pattern“ kostenlos?

Ja — der vollständige Text von „Repository-Pattern“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Android Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Android Academy-Kurs umfasst insgesamt 6 Lektionen.

Was lerne ich in „Repository-Pattern“?

Trennen Sie mit dem Repository-Pattern den Datenzugriff von der UI. Koordinieren Sie Room-Datenbank und Netzwerk-API als zentrale Wahrheitsquellen. Du übst Android Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Android Academy zu starten?

Keine Vorkenntnisse erforderlich. Android Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 6.

Wie lange dauert die Lektion „Repository-Pattern“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Android Academy-Lektion Code schreiben und ausführen?

Ja. Jede Android Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. ViewModel und LiveData
  2. Room-Datenbank
  3. Coroutines und Suspend-Funktionen
  4. Repository-Pattern
  5. Navigation Component
  6. Dependency Injection mit Hilt
← Zurück zu Android Academy