Android-ViewModel

Recep Yeşilkaya
3 min readNov 23, 2020

--

Herkese Selamlar, Bugün sizlere ViewModel hakkında genel bilgi vermeye gayret edeceğim. Hazırsanız başlayalım.

ViewModel MVVM Architectural Design’ın VM açılımıdır. Bu katman içerisinde UI dan atılan isteklerin business lojiklerinin karşılandığı sınıflardır. ViewModellar içerisinde çeşitli yapılar kullanılabilir.

Neden ViewModel’a İhtiyaç Duyarız?

ViewModel’lara ihtiyaç duymamızdaki nedenlerden bir tanesi kendilerine ait bir yaşam döngülerinin olmasıdır. Bu yaşam döngüsü sadece ait olduğu UI kapatılırsa ViewModeldaki onCleared metodu çağırılır ve yaşam döngüsü sonlandırılır.

UI da yaşam döngülerini dikkate almadan kod geliştirirsek, cihaz ekranı yan çevrildiğinde uygulamanın destroyed edildiğini ve tekrar ayağa kalktığını gözlemleriz. Bu durum sonucu yaptığımız değişiklikler belli yapılar ile korunmadıysa veri kaybı oluşur. Fakat ViewModel içerisinde tanımlanan verilerin değerlerinde kayıp olmayacaktır.

Ufak çaplı veriler için onSaveInstanceState ve onRestoreInstanceState metotlarını da kullanabilirsiniz. Fakat farklı caselerde işlem yapabilmemize de olanak tanıdığı için ViewModel’ları da tercih edebilirsiniz.

Bu işlemlerin dışında, kod okunabilirliği açısından farklı hizmetlerin farklı katmanlar tarafından kontrol edilmesi proje geliştirirken bizlere çok büyük avantajlar sağlayacaktır.

ViewModelFactory

ViewModel constructor içerisine parametre tanımlarsak ve UI içerisinde ViewModel’ı initialize ettiğimiz takdirde build’de hata almayız fakat Run Time da hata ile karşılaşırız. Bu tür tanımlamalarda ViewModelFactory ile bu sorunu çözebiliriz.

ViewModelFactory’i daha detaylı incelemek isterseniz aşağıdaki bloğu inceleyebilirsiniz.

Gelin ufak bir örnek ile konuyu pekiştirelim. 2 farklı tanımlama ile saat bilgisini alacağımız bir uygulama tasarlayalım.

Build.Gradle(app)

implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"

MainActivity-UI

ViewModel

Zaman bilgisini elde edeceğimiz bir tanımlamayı ViewModel içerisinde oluşturuyoruz.

UI

Aynı şekilde zaman bilgisinin farklı bir tanımlamasını da UI içerisinde yapıyoruz.

Yukarıda da gözlemlediğiniz gibi uygulama ekranı yan çevrildiğinde UI tarafında tekrardan değişken tanımlamaları oluşuyor. ViewModel içerisinde yaşam döngüsü gereği değerlerde bir kayıp söz konusu değil.

Daha detaylı bilgi ve uygulama ile deneyimlemek isterseniz bağlantıdan ViewModel Google Codelab’ine ulaşabilirsiniz.

ViewModel’ı ifade etmeye çalıştığım yazımın sonuna geldik. Sağlıklı ve Keyifli Kodlamalar.

--

--

Recep Yeşilkaya
Recep Yeşilkaya

No responses yet