Android MVVM Kullanımı 1

Hüseyin Serkan Özaydin
3 min readFeb 16, 2019

--

Merhaba, bu yazımda size MVVM design patterını anlatıp küçük bir login örneği göstereceğim.

Uzun zamandır kişisel projelerimde ve şirket projelerinde MVP yapısı kullandım. Lakin Google’nin MVVM design patterını desteklemesinden sonra bu konuda bilgi sahibi olmam gerektiğine karar verdim.

Daha önce Android uygulama geliştirirken nasıl MVP yapısı kullanılacağına dair yazı serim:

Bu yazımızda örneğe başlamadan önce şu 3 soruya cevap vereceğiz

  • MVVM’în nasıl bir yapısı var?
  • MVVM’in avantajı ne?
  • MVVM ile MVP arasındaki farklar neler?

1 - MVVM’in yapısı

MVVM yapısı 3 parçadan oluşuyor

  • Model
  • View
  • ViewModel

Teker teker bu parçalardan bahsedelim

Model: Uygulamanın verilerini içerir ve direkt View ile iletişime geçmek. Genellikle datayı ViewModel’a gönderir.

View: Uygulamanın UI kısmını sağlar ama herhangi bir mantık içermez. Sadece veriyi ViewModel’a gönderir

ViewModel: Model ile View arasındaki iletişimi sağlar.

MVVM Pattern’ı anlatan şöyle bir görseli şuraya bırakıyorum

2- MVVM’in Avantajı Ne?

Google, Google I/O 18 ile MVVM’i destekleyeceğini açıkladı ve bunun için componentler oluşturdu. Bunun dışında MVP’ye göre uygulamalar daha hızlı çıkıyor.

Sonuç olarak Google’nin böyle bir davranışı es geçilmemeli. Yatırım yapılması gereken bir konu olarak düşünüyorum.

3- MVVM ile MVP Arasındaki Farklar

  • Presenter yerine ViewModel kullanılıyor
  • Presenter View’ı klasik yollar ile güncelliyordu lakin MVVM’de Data Binding adında bir olay var aşağıda değineceğiz.
  • ViewModel hangi View’ın kendisini dinlediğini bilmez

Bu farklardan da bahsettiğimize göre artık implementasyona geçebiliriz.

MVVM’i Android uygulamalara implement etmek için 2 yöntem var

1- Data Binding

2- RXJava

Biz bu yazımızda Data Binding yöntemini kullanacağız. Teknik olarak objenizi XML tarafına yollayacağız.

Bunun için BindingAdapter’e ve XML tarafında özel değişikler yapacağız. BindingAdapter XML tarafında bulunan attirubete (değeri) dinliyor olacak.

O zaman başlayalım.

En başta projemizde dataBinding’i aktif etmemiz lazım.

Bunun için uygulamanın build.gradle dosyasına aşağıdaki kodu ekliyoruz

Artık uygulamanızda databinding aktif halde.

Şimdi uygulamamıza diğer bağımlılıkları ekleyelim. Build.gradle dosyasına aşağıdaki bağımlılığı ekliyoruz

Bir sıkıntı yaşamadan buraya kadar geldi iseniz artık biraz kodlayalım :)

İlk önce business kısmının olacağı Model’imizden başlayalım

User.java

Yukarıdaki User sınıfında gördüğünüz gibi “isInputDataValid()” adlı bir fonksiyon var ve bu fonksiyonda bu kullanıcının bazı verileri doğru girip girmediğini kontrol ediyoruz. Örneğin girdiği mail adresi gerçekten mail patternına uygun mu? gibi

Şimdi kullanıcılara göstereceğimiz Layout dosyasını oluşturalım

activity_main.xml

Bence bu kısım çok önemli teker teker bunların ne olduğunu açıklayalım. Böyle yapıştır geç olmaz yani :)

Layout dosyamızda <data> </data> tagleri var peki bu tagler ne?

Size yukarıda Java classlarında oluşturduğumuz bir objeyi layouta gönderdiğimizi söylemiştim. İşte yukarıdaki tagler gelen objeyi yakalıyor.

Biz obje olarak ViewModel Classımızı gönderdik. Peki akıllarda tek bir soru ViewModel’i oluşturmadık nasıl gönderiyoruz :) Biliyorum lakin ilk önce layout dosyamızı oluşturmanın daha mantıklı olduğunu düşündüm. Siz hayali olarak oluşturduğumuzu düşünün. Diğer yazımızda bahsediyor olacağız.

Burasını anladığımıza göre devam edelim layout üstünden. Yukarıda gördüğünüz bir farklılık var değil mi? Android XML içinde “afterTextChanged” diye bir tanım yok. Peki bu ne oluyor?

Bu bir fonksiyon ismi diğer yazıda oluşturacağımız ViewModel’da bulunan bir fonksiyon. Dedim ya ViewModel’ı bir obje olarak gönderdik artık o objeden o sınıfın fonksiyonlarına ulaşabiliriz.”editable” ise şu oluyor : “Edittext’e yazılan text” ve bu texti “afterEmailTextChanged” fonksiyonuna değişken olarak veriyoruz.

Şimdi butona gelelim. Orada ise şöyle bir farklılık var

Yani diyoruz ki viewModel objesindeki “onLoginClicked” fonksiyonunu çağır.

En son yukarıdaki kısım kaldı. Ve bu da şu demek viewModel’da bulunan toastMessage adlı değişkene bunu bind et. Çok açıklayıcı olmadı biliyorum ama diğer yazımızda ViewModel sınıfı ile bu olayı daha iyi kavrıyor olacağız.

İkinci yazıda görüşmek üzere.

Not: Bu yazı aşağıdaki linkten referans alınarak yazılmıştır

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Responses (4)

Write a response