Android’de MVVM Mimarisi Nasıl Uygulanır?

Şevval Özdamar
4 min readMar 31, 2023

--

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.

Android uygulamasında MVVM yapısını oluşturan komponentler

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.

Android uygulamasında MVVM yapısının birbiriyle iletişim kurma şekli

Ş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:

build.gradle(Module :app) dosyası

1. Model Oluşturma

1.1 Data Class

Room veritabanında oluşturacağımız table’ın adına filmTable verdik
Film data class oluşturuyoruz ve bu class’ın veritabanımızın bir entity’si olduğunu belirtiyoruz

1.2 Room Database

Room kütüphanesini kullanarak local database oluşturuyoruz

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.

Veritabanından tüm filmleri çekecek olan sorguyu hazırlıyoruz

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.

FilmViewModel.kt dosyası

3. View Oluşturma

1.1 XML Layout

activity_main.xml dosyasına filmlerimizi listeyecek olan recyclerview’i ekliyoruz

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.

MainActivity.kt dosyası

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:

--

--

Şevval Özdamar
Şevval Özdamar

Written by Şevval Özdamar

Computer Engineer - Android Developer

No responses yet