Android’de MVVM Mimarisi Nasıl Uygulanır?
Herkese selamlar. Bu yazıda MVVM’in ne olduğundan, ne işe yaradığından ve Android uygulamalarında MVVM’i hangi komponentlerin temsil ettiğinden bahsedeceğim. En sonda kod örnekleri ile bir Android projesinde MVVM yapısını nasıl oluşturabiliriz onu göstereceğim. Hemen başlayalım!
MVVM, Microsoft tarafından geliştirilmiş yazılım tasarım desenidir. Amacı uygulamanın içindeki kullanıcı arayüzü ile business logic işlemlerini birbirinden ayırmaktır. Ayrıca komponentlerin birbirine olan bağımlılığını azaltır. Böylece kodlarımız daha temiz, anlaşılır ve test edilebilir hale gelir.
MVVM; Model, View, ViewModel yapılarından oluşur. Bu yapıların bir Android uygulamasında neyi temsil ettiğine bakalım:
Model: Data ve business logic elemanlarını temsil eder. Bunlar; Local source veya Remote source, Model class ve Repository’lerdir.
View: Activity, Fragment, XML gibi kullanıcı arayüzü elemanlarını temsil eder. Kullanıcı etkileşimlerini ViewModel’e gönderir fakat ViewModel’den doğrudan yanıt almaz, bunun için ViewModel’in içerdiği observable nesnelerine (gözlemlenebilir nesneler) bağlanmak zorundadır.
ViewModel: Model ve View arasında iletişim kurar. View’a doğrudan bir referans sağlamadığı için hangi View’ın onunla etkileşimde olduğunu bilmez. View tarafından observe edilen, observable nesnelerini içerir. Ayrıca ViewModel, View’ın databinding yoluyla kullandığı propertie ve command’lerini de içerebilir.
Databinding, XML üzerindeki UI komponentleri ile o komponentlere karşılık gelmesini istediğimiz data sources’ları birbirine bağlamaya yarayan bir kütüphanedir.
Şimdi kodlarla uygulamaya geçmek istiyorum. Çok basit bir şekilde filmleri uygulama ana ekranında listeyeceğimiz bir Android uygulamasını MVVM mimarisini kullanarak yapacağız.
Öncelikle Room Database ve MVVM kullanabilmek için uygulama içerisindeki build.gradle(Module :app) dosyamıza bazı eklentiler yapmalıyız:
1. Model Oluşturma
1.1 Data Class
1.2 Room Database
1.3 DAO (Data Access Object)
DAO sınıfı, Room veritabanındaki verilere erişmemizi ve çeşitli query’ler oluşturmamızı sağlar. DAO sınıfı, mutlaka Interface veya Soyut Sınıf olmalıdır.
1.4 Repository
Repository sınıfı, Room veritabanıyla ViewModel adına etkileşim kurar. Repository sadece Room için değil API işlemlerinde de kodun ayıklanabilmesi ve mimari düzeni açısından önerilen en iyi uygulamadır.
2. ViewModel Oluşturma
ViewModel’in Model ile View arasında iletişim kuracak olan yapı olduğundan bahsetmiştik. İşte buradaki allFilms nesnesi, observable (gözlemlenebilir) nesnedir.
Ayrıca allFilms nesnesini LiveData olarak tanımladık ki veritabanında yaşanacak her durum değişikliğinde ViewModel, veritabanıyla(Model) iletişim halinde olduğundan allFilms içindeki verileri güncelleyebilsin.
3. View Oluşturma
1.1 XML Layout
1.2 Activity
ViewModel üzerindeki nesneleri View üzerinden gözlemlememiz gerektiğinden bahsetmiştik. Aşağıda görüldüğü gibi View üzerinden ViewModel’da bulunan allFilms nesnesini observe ediyoruz. Böylelikle güncel verileri devamlı olarak kullanıcı arayüzüne aktarabiliyoruz.
Sonuç Nedir?
MVVM mimarisini uygulamadan da Android uygulamaları yapabilir. Bu mimariyi uygulamak tabi ki zorunlu değil fakat eğer profesyonel, test edilebilir, bakımı yapılabilir ve anlaşılması kolay uygulamalar yapmak istiyorsak MVVM gibi yazılım tasarım desenlerini kullanmayı tercih etmeliyiz.
Okuduğunuz için teşekkürler! Umarım anlaşılır ve faydalı olmuştur :)
Kaynaklar: