Repository-patroon
Scheid gegevenstoegang van de UI met het Repository-patroon. Coördineer de Room-database en de netwerk-API als één bron van waarheid.
Repository-patroon is een gratis Android Academy-les op CoddyKit. Dit is les 4 van 6. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Android Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Android Academy bevat in totaal 6 lessen.
Waarom een Repository?
Naarmate je app groeit, kan de ViewModel vol komen te staan met code voor gegevenstoegang (Room-query's, Retrofit-aanroepen, het uitlezen van SharedPreferences).
Het Repository-patroon plaatst alle gegevenstoegang achter één klasse. De ViewModel communiceert alleen met de Repository en hoeft niet te weten waar de gegevens vandaan komen.
De architectuurlagen
De aanbevolen Android-architectuur heeft drie lagen:
- UI-laag — Activity/Fragment toont gegevens en verzendt gebruikersgebeurtenissen
- ViewModel — bewaart de status, verwerkt gebeurtenissen en roept de Repository aan
- Repository — haalt gegevens op uit Room (lokaal) of Retrofit (op afstand) en bepaalt welke bron wordt gebruikt
Een eenvoudige Repository
Maak een Repository-klasse die je DAO en externe API omhult:
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)
}
}De ViewModel gebruikt de Repository
De ViewModel haalt gegevens op uit de Repository, niet rechtstreeks uit de 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)
}
}
}Strategie: cache eerst
Een veelgebruikt Repository-patroon is cache eerst. Toon lokaal opgeslagen gegevens direct en vernieuw ze daarna op de achtergrond vanuit het netwerk:
- 1. Geef direct gegevens uit de cache van Room door
- 2. Haal actuele gegevens op uit de API
- 3. Sla ze op in Room — Flow wordt automatisch bijgewerkt
Zo krijg je korte laadtijden en uiteindelijk actuele gegevens.
Implementatie van cache eerst
Vernieuw de lokale database vanuit het netwerk:
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
Wanneer een ViewModel constructorparameters heeft, heb je een ViewModelFactory nodig om deze te maken:
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 voor dependency-injectie
Het handmatig maken van Repository- en ViewModel-instanties wordt omslachtig in grote apps. Hilt (dependency-injectie) automatiseert dit:
- Voorzie je klassen van de annotaties
@HiltViewModelen@Inject - Hilt maakt afhankelijkheden automatisch aan en levert ze aan
- Alle overbodige fabriekscode verdwijnt
Samenvatting van de voordelen
Het Repository-patroon biedt:
- Testbaarheid — vervang de echte API door een nepimplementatie voor unittests
- Scheiding van verantwoordelijkheden — de ViewModel weet niet of gegevens lokaal of op afstand staan
- Eén bron van waarheid — Room is altijd de bron; de API vernieuwt deze alleen
- Flexibiliteit — voeg caching, paginering of nieuwe gegevensbronnen toe zonder de ViewModel aan te passen
Korte controle
Wat is de belangrijkste verantwoordelijkheid van de Repository in de Android-architectuur?
Samenvatting: Repository-patroon
Je begrijpt nu de aanbevolen Android-architectuur:
- UI → ViewModel → Repository → (Room / Retrofit)
- De Repository is de enige bron van waarheid
- Cache eerst: toon lokale gegevens direct en vernieuw ze op de achtergrond
- Gebruik ViewModelFactory wanneer de ViewModel constructorparameters heeft
- Hilt automatiseert dependency-injectie in grotere apps
Laatste cursus: netwerk en afwerking — Retrofit, afbeeldingen en publiceren.
Leer Kotlin met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 36
- Lessen
- 152
Veelgestelde vragen
Is de les “Repository-patroon” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Android Academy, waaronder “Repository-patroon”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Android Academy bevat in totaal 6 lessen.
Wat leer ik in “Repository-patroon”?
Scheid gegevenstoegang van de UI met het Repository-patroon. Coördineer de Room-database en de netwerk-API als één bron van waarheid. Je oefent met Android Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Android Academy te beginnen?
Ervaring vooraf is niet nodig. Android Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 6.
Hoe lang duurt de les “Repository-patroon”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Android Academy?
Ja. Elke les over Android Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- ViewModel en LiveData
- Room-database
- Coroutines en suspend-functies
- Repository-patroon
- Navigation Component
- Dependency injection met Hilt