Jetpack Compose ViewModel ve UI State Rehberi: Temiz Android Ekranları Nasıl Tasarlanır?
Jetpack Compose ile ekran yazmak kolaylaşırken uygulama büyüdüğünde durum yönetimi, ağ çağrıları ve veri erişiminin composable fonksiyonların içine karışması bakım sorunlarına yol açabilir. Modern Android mimarisi önerileri, UI ile veri katmanları arasında daha net sınırlar kurmayı ve ViewModel üzerinden UI state sunmayı güçlü bir yaklaşım olarak öneriyor.
UygulamaTest Editörlüğü · Yayınlandı: 6 Ekim 2026 · Güncellendi: 6 Ekim 2026
Compose ekranı her şeyi yapmak zorunda değil
Bir composable’ın görevi esas olarak kullanıcı arayüzünü göstermektir. Firestore çağrısı başlatmak, kullanıcı yetkisini hesaplamak, ağ hatalarını yorumlamak ve kalıcı veriyi doğrudan değiştirmek aynı fonksiyonun içine yığıldığında kod hızla zorlaşır.
Daha sürdürülebilir yaklaşımda ekran kullanıcı eylemini ViewModel’e iletir, ViewModel gerekli iş mantığını ve veri erişimini ilgili katmana aktarır, sonuç ise UI state üzerinden ekrana geri gelir.
UI State neden önemlidir?
Bir ekran için loading, success ve error durumlarını açıkça modellemek kullanıcı deneyimini ve test edilebilirliği iyileştirir. Örneğin veri yüklenirken spinner, hata olduğunda hata mesajı ve veri geldiğinde liste göstermek tek bir durum modelinden yönetilebilir.
StateFlow gibi akışlar kullanıldığında UI yalnızca mevcut durumu gözlemler. Bu yapı, ekran yeniden oluşturulduğunda veya cihaz döndürüldüğünde durumun kaybolması gibi sorunları azaltmaya yardımcı olabilir.
Repository katmanı ne sağlar?
Repository, ViewModel ile gerçek veri kaynağı arasında bir sınır oluşturur. Veri Firestore’dan, REST API’den, Room’dan veya başka bir kaynaktan geliyor olsa bile ViewModel doğrudan her API ayrıntısını bilmek zorunda kalmaz.
Bu ayrım test sırasında sahte veri kaynağı kullanmayı ve veri erişimini değiştirmeyi kolaylaştırır. Android’in mimari önerileri de data layer içinde repository yaklaşımını güçlü biçimde öneriyor.
ViewModel içinde neler olmalı?
ViewModel ekranın ihtiyaç duyduğu UI state’i üretmeli ve kullanıcı eylemlerini anlamlı metotlarla işlemelidir. Android yaşam döngüsüne bağlı Activity, Fragment veya Context referanslarını tutmaktan kaçınmak önerilir. Karmaşık uygulamalarda domain katmanı ile iş kurallarını daha da ayırabilirsiniz.
Özellikle Firebase kullanan uygulamalarda ViewModel’in doğrudan çok sayıda Firestore operasyonu yapan dev bir sınıfa dönüşmemesine dikkat edin. Küçük sorumluluklar halinde ayırmak hata ayıklamayı kolaylaştırır.
Compose + Firebase için pratik yapı
Basit bir uygulamada ekran → ViewModel → Repository → Firebase çizgisi çoğu ihtiyacı karşılayabilir. UI state tek bir kaynaktan gelir, ViewModel iş akışını yönetir, Repository Firebase ayrıntılarını kapsar ve Security Rules sunucu tarafı erişim sınırını korur. Uygulama büyüdüğünde buna domain/use-case katmanı eklenebilir.
Resmi kaynaklar
Bu içerik bilgilendirme amacıyla hazırlanmıştır. Google Play, Android ve Firebase gereksinimleri zaman içinde değişebilir. Yayın veya politika kararı vermeden önce ilgili resmi dokümantasyonun güncel sürümünü kontrol edin.