Repository-malli
Erottakaa tietojen käyttöliittymästä Repository-mallin avulla. Koordinoikaa Room-tietokannan ja verkkorajapinnan toimintaa yhtenä totuuden lähteenä.
Repository-malli on ilmainen Android Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/6. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Android Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Android Academy-kurssilla on yhteensä 6 oppituntia.
Miksi Repository?
Sovelluksen kasvaessa ViewModeliin voi kertyä paljon tietojen käyttämiseen liittyvää koodia (Room-kyselyitä, Retrofit-kutsuja ja SharedPreferences-lukuja).
Repository-malli siirtää kaiken tietojen käytön yhden luokan taakse. ViewModel keskustelee vain Repositoryn kanssa — sen ei tarvitse tietää, mistä tiedot tulevat.
Arkkitehtuurikerrokset
Suositeltu Android-arkkitehtuuri koostuu kolmesta kerroksesta:
- UI-kerros — Activity/Fragment näyttää tiedot ja välittää käyttäjän tapahtumat
- ViewModel — säilyttää tilan, käsittelee tapahtumat ja kutsuu Repositorya
- Repository — hakee tietoja Roomista (paikallinen) tai Retrofitistä (etäpalvelu) ja päättää, mitä lähdettä käytetään
Yksinkertainen Repository
Luo Repository-luokka, joka sisältää DAO:n ja etä-API:n:
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)
}
}ViewModel käyttää Repositorya
ViewModel hakee tiedot Repositoryltä — ei suoraan DAO:lta:
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)
}
}
}Välimuisti ensin -strategia
Yleinen Repository-mallin toteutustapa on välimuisti ensin. Näytä paikallisesti välimuistissa olevat tiedot heti ja päivitä ne sitten verkosta taustalla:
- 1. Lähetä Roomissa välimuistissa olevat tiedot heti
- 2. Hae tuoreet tiedot API:sta
- 3. Tallenna tiedot Roomiin — Flow päivittyy automaattisesti
Näin latausajat ovat lyhyet ja tiedot päivittyvät lopulta tuoreiksi.
Välimuisti ensin -toteutus
Päivitä paikallinen tietokanta verkosta haetuilla tiedoilla:
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
Kun ViewModelilla on konstruktoriparametreja, tarvitset ViewModelFactoryn sen luomiseen:
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 riippuvuuksien injektointiin
Repository- ja ViewModel-olioden luominen manuaalisesti käy työlääksi suurissa sovelluksissa. Hilt (Dependency Injection) automatisoi tämän:
- Merkitse luokat annotaatioilla
@HiltViewModelja@Inject - Hilt luo ja tarjoaa riippuvuudet automaattisesti
- Poistaa kaiken tehdasluokkien vaatiman toistuvan pohjakoodin
Hyötyjen yhteenveto
Repository-malli tuo seuraavat hyödyt:
- Testattavuus — vaihda oikea API testejä varten valefunktioon
- Vastuiden erottelu — ViewModelin ei tarvitse tietää, ovatko tiedot paikallisia vai etäpalvelusta
- Yksi totuuden lähde — Room on aina tietojen lähde; API vain päivittää sen
- Joustavuus — voit lisätä välimuistin, sivutuksen tai uusia tietolähteitä koskematta ViewModeliin
Pikakertaus
Mikä on Repositoryn päävastuu Android-arkkitehtuurissa?
Kertaus: Repository-malli
Ymmärrät nyt suositellun Android-arkkitehtuurin:
- UI → ViewModel → Repository → (Room / Retrofit)
- Repository on ainoa totuuden lähde
- Välimuisti ensin: näytä paikalliset tiedot heti ja päivitä ne taustalla
- Käytä ViewModelFactorya, kun ViewModelilla on konstruktoriparametreja
- Hilt automatisoi riippuvuuksien injektoinnin suurissa sovelluksissa
Viimeinen kurssi: verkko-ominaisuudet ja viimeistely — Retrofit, kuvat ja julkaiseminen.
Opi Kotlin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 36
- Oppitunnit
- 152
Usein kysytyt kysymykset
Onko oppitunti ”Repository-malli” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Android Academy-oppimispolun 3 oppituntia, myös oppitunnin “Repository-malli”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Android Academy-kurssilla on yhteensä 6 oppituntia.
Mitä opin oppitunnilla ”Repository-malli”?
Erottakaa tietojen käyttöliittymästä Repository-mallin avulla. Koordinoikaa Room-tietokannan ja verkkorajapinnan toimintaa yhtenä totuuden lähteenä. Harjoittelet Android Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Android Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Android Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/6.
Kuinka kauan ”Repository-malli”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Android Academy-oppitunnilla?
Kyllä. Jokainen Android Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- ViewModel ja LiveData
- Room-tietokanta
- Korutiinit ja suspend-funktiot
- Repository-malli
- Navigation Component
- Riippuvuuksien injektointi Hiltillä