Androidde MVVM
MVVM Nedir?
MVVM (Model-View-ViewModel), Android uygulamalarında UI kodunu iş mantığından ayırmayı amaçlayan bir mimari yapıdır.
-
Model: Uygulamanın veri katmanı, yani veritabanı, API, veya diğer veri kaynakları.
-
View: Kullanıcı arayüzü, aktiviteler, fragmentler veya XML dosyaları.
-
ViewModel: View ile Model arasında köprü görevi gören, UI verilerini yöneten ve iş mantığını içeriden ayıran sınıftır.
Neden MVVM Kullanmalıyız?
-
Bu mimari, UI ile veri ve iş mantığı arasındaki bağımlılığı azaltarak kodun okunabilirliğini ve sürdürülebilirliğini artırır.
-
İş mantığını ViewModel içinde topladığınız için, birim testleri yapmak daha kolaylaşır.
-
LiveData, StateFlow gibi yapıların kullanımı ile UI verilerindeki değişiklikleri otomatik olarak gözlemleyebiliriz.
MVVM Bileşenleri ve Kullanımı
1. Model
Verilerinizin tutulduğu ve API/Veritabanı işlemlerinin gerçekleştirildiği katmandır.
data class Besin(
val isim: String,
val kalori: String,
val karbonhidrat: String,
val protein: String,
val yag: String,
val gorsel: String
)
2. ViewModel
ViewModel, UI ile Model arasındaki veri akışını yöneten sınıftır.
class BesinViewModel(application: Application) : AndroidViewModel(application) {
private val besinApiService = BesinAPIService() // Retrofit API servisi
val besinler = MutableLiveData<List<Besin>>() // UI ile gözlemlenecek veri
val hataMesaji = MutableLiveData<Boolean>()
val besinYukleniyor = MutableLiveData<Boolean>()
// API'den veya veritabanından veri çekme işlemi
fun verileriGetir() {
besinYukleniyor.value = true
viewModelScope.launch {
try {
val gelenBesinListesi = besinApiService.getData()
besinler.value = gelenBesinListesi
hataMesaji.value = false
} catch (e: Exception) {
hataMesaji.value = true
} finally {
besinYukleniyor.value = false
}
}
}
}
-
LiveData: UI bileşenleri, LiveData üzerinden ViewModel'deki veriyi gözlemler ve veri değiştiğinde otomatik güncellenir.
-
viewModelScope: Coroutine'leri yönetmek için kullanılır, böylece ViewModel'in yaşam döngüsü ile uyumlu çalışır.
3. View
View, Activity veya Fragment gibi UI bileşenleridir. Burada ViewModel ile etkileşim kurarak veri görüntülenir.
class BesinListeFragment : Fragment() {
private lateinit var binding: FragmentBesinListeBinding
private lateinit var viewModel: BesinViewModel
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentBesinListeBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel = ViewModelProvider(this).get(BesinViewModel::class.java)
// Verileri gözlemleme
viewModel.besinler.observe(viewLifecycleOwner) { besinListesi ->
// UI'yi güncelle (örneğin, RecyclerView adapterine aktar)
}
viewModel.verileriGetir()
}
}
- ViewModelProvider: ViewModel'i oluşturup, yaşam döngüsüne uygun şekilde yönetir.
- LiveData Gözlemi: viewModel.besinler.observe() ile veri değişikliklerini UI'da anında yansıtabilirsiniz.
MVVM'nin Avantajları
-
Bağımsızlık: ViewModel, UI'dan tamamen bağımsız çalışır. Bu, hem test edilebilirliği artırır hem de kodun bakımını kolaylaştırır.
-
Yaşam Döngüsü Desteği: ViewModel, Android yaşam döngüsü ile uyumlu çalışır; örneğin, konfigürasyon değişikliklerinde veri kaybı yaşanmaz.
-
Veri Güncelleme: LiveData ve Flow gibi yapıların kullanımı, UI verilerinde anlık değişiklikleri kolayca yakalamanızı sağlar.
Özet
-
MVVM mimarisi, Android uygulamalarında kodun düzenli, sürdürülebilir ve test edilebilir olmasını sağlar.
-
Model, ViewModel ve View bileşenlerini ayırarak, her birinin sorumluluğu net bir şekilde belirlenmiş olur.
-
Bu yaklaşım, uygulama geliştirme sürecini daha modüler ve esnek hale getirir.