Repository Deseni
Repository deseniyle veri erişimini kullanıcı arayüzünden ayırın. Room veritabanı ile ağ API'si arasında tek doğruluk kaynağı olarak koordinasyon sağlayın.
Repository Deseni, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 6 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 6 dersten oluşur.
Neden Repository?
Uygulamanız büyüdükçe ViewModel, veri erişim kodlarıyla (Room sorguları, Retrofit çağrıları, SharedPreferences okumaları) karmaşıklaşabilir.
Repository deseni, tüm veri erişimini tek bir sınıfın arkasına taşır. ViewModel yalnızca Repository ile iletişim kurar; verilerin nereden geldiğiyle ilgilenmez.
Mimari Katmanlar
Önerilen Android mimarisi üç katmandan oluşur:
- UI katmanı — Activity/Fragment verileri gösterir ve kullanıcı olaylarını gönderir
- ViewModel — durumu tutar, olayları işler ve Repository'yi çağırır
- Repository — verileri Room'dan (yerel) veya Retrofit'ten (uzak) alır ve hangi kaynağın kullanılacağına karar verir
Basit Bir Repository
DAO'nuzu ve uzak API'nizi saran bir Repository sınıfı oluşturun:
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 Repository'yi Kullanıyor
ViewModel verileri doğrudan DAO'dan değil, Repository'den alır:
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)
}
}
}Önbellek Öncelikli Strateji
Yaygın bir Repository deseni: önbellek öncelikli. Yerel olarak önbelleğe alınan verileri hemen gösterin, ardından arka planda ağdan yenileyin:
- 1. Önbelleğe alınan verileri Room'dan hemen yayınlayın
- 2. Güncel verileri API'den alın
- 3. Room'a kaydedin — Flow otomatik olarak güncellenir
Bu yaklaşım hızlı yükleme ve zamanla güncellenen veriler sağlar.
Önbellek Öncelikli Uygulama
Yerel veritabanını ağdan gelen verilerle yenileyin:
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
Bir ViewModel'ın kurucu parametreleri olduğunda, onu oluşturmak için bir ViewModelFactory gerekir:
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]Bağımlılık Eklemek için Hilt
Büyük uygulamalarda Repository ve ViewModel örneklerini elle oluşturmak zahmetli hâle gelir. Hilt (Bağımlılık Enjeksiyonu) bu işlemi otomatikleştirir:
- Sınıflarınızı
@HiltViewModelve@Injectile belirtin - Hilt, bağımlılıkları otomatik olarak oluşturur ve sağlar
- Fabrika için gereken kalıp kodunu ortadan kaldırır
Faydaların Özeti
Repository deseni şunları sağlar:
- Test edilebilirlik — birim testleri için gerçek API'yi sahte bir API ile değiştirebilirsiniz
- Sorumlulukların ayrılması — ViewModel verilerin yerel mi yoksa uzak mı olduğunu bilmez
- Tek doğruluk kaynağı — kaynak her zaman Room'dur; API yalnızca onu yeniler
- Esneklik — ViewModel'a dokunmadan önbelleğe alma, sayfalama veya yeni veri kaynakları ekleyebilirsiniz
Kısa Kontrol
Android mimarisinde Repository'nin temel sorumluluğu nedir?
Özet: Repository Deseni
Artık önerilen Android mimarisini anlıyorsunuz:
- UI → ViewModel → Repository → (Room / Retrofit)
- Repository, tek doğruluk kaynağıdır
- Önbellek öncelikli yaklaşım: yerel verileri hemen gösterin, arka planda yenileyin
- ViewModel'da kurucu parametreleri olduğunda ViewModelFactory kullanın
- Hilt, büyük uygulamalarda bağımlılık enjeksiyonunu otomatikleştirir
Son kurs: Ağ ve Son Dokunuşlar — Retrofit, görseller ve yayımlama.
Sıkça Sorulan Sorular
“Repository Deseni” dersi ücretsiz mi?
Evet — “Repository Deseni” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 6 dersten oluşur.
“Repository Deseni” dersinde ne öğreneceğim?
Repository deseniyle veri erişimini kullanıcı arayüzünden ayırın. Room veritabanı ile ağ API'si arasında tek doğruluk kaynağı olarak koordinasyon sağlayın. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Android Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 6 dersinin 4. dersidir.
“Repository Deseni” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- ViewModel ve LiveData
- Room Veritabanı
- Coroutines ve Suspend Fonksiyonları
- Repository Deseni
- Navigation Bileşeni
- Hilt ile Bağımlılık Enjeksiyonu