Nedir Bu MVVM ?

Recep Yeşilkaya
3 min readNov 9, 2020

--

Herkese Selamlar , Bugün sizlere Android’de birçok projede kullanılan Design Pattern’ler den olan MVVM’i konuk edineceğiz.

Tarihçesine bakacak olursak ;

İlk olarak 2005 yılında John Gossman tarafından decoupling problemini çözmek için ortaya atılan MVVM pattern aslında Martin Fowler’ın Presentation Model pattern’ın WPF ve Silverlight platformları için özelleştirilmiş halidir.

MVVM bizlerin proje geliştirirken, katmanların birbirinden ayrılması ve bu katmanlar arasındaki ilişkileri yönlendirdiğimiz tasarım kalıbı (design pattern)’dır.

Design Pattern

Design Pattern’lar yazılım projelerinde sürekli karşılaşılan benzer sorunlardan yola çıkarak, Code Optimization’ını en iyi şekilde kurgulayabilmemize imkan tanıyan yapılardır.

Neden Bir Design Pattern’a İhtiyaç Duyarız?

Şöyle bir örnekle açıklayalım. Bizler yemek yerken genelde çorba, ana yemek, tatlı ve salatayı farklı tabaklarda servis ederiz. Hepsini bir tabak içerisinde bulunmasını tercih etmeyiz. Çünkü birbirlerinden farklı tatlara sahip olduğu için ayrıştırılması gerekir.

Ne kadar doğru bir örnek olduğu tartışılabilir:) Bu şekilde bizler de kodlarımızı geliştirirken dikkat etmemiz gereken noktalardan biri, kod yapılarımızda farklı amaçlara hizmet edenlerin ayrıştırılması gerekir.

Design Pattern’lar (MVVM-MVC-MVP-MVI) bizlerin kod geliştirirken katmanlı bir yapıda kodlarımızı geliştirmemize olanak sağlar.

Projemiz için yapılacak değişikliklerde sürekli bir çok yeri değiştirmektense, ilgili katmanda değişiklik yapılarak proje geliştirilmesi kolaylaştırılır.

Her iş kendi katmanında yapılır. Kendisine ait olmayan işin nasıl gerçekleştiği ile ilgilenmez.

Geliştirdiğimiz projelerden ayrıldıktan sonra veya bizlerin farklı projelere geçişlerinde projeyi anlayıp yorumlamamızı kolaylaştırır.

MVVM Yapısı

MVVM-> Model - View - ViewModel katmanlarından oluşmaktadır.

Model : Web servislerinde , veri tabanlarında veya farklı veri kaynaklarından çekilen verileri temsil etmek için oluşturduğumuz sınıflardır.

View : Kullanıcının etkileşimde bulunduğu önyüzlerin (Activity,Fragment) içerdiği kodların bulunduğu sınıflardır. Bu sınıflarda lojik işlemler yapılmaz. Bu sınıfların amacı ViewModel’dan istediğimiz verileri Observe etmektir. Kullanıcı ile ekran arasındaki işlemler gerçekleştirilir.

ViewModel : View ile Model’ler arasındaki iletişimi sağlayan sınıflardır. Bu sınıflarda lojik işlemler gerçekleştirilir. View’den istek atılır ve ViewModel’da belirli lojikler ile veri kaynakları sağlanır. Bu katmanda oluşturduğumuz LiveData’lar ile değişikliklerin sonuçları View’da Observe edilir. ViewModel içerisinde onCleared() metodu ile işlemlerinizi temizleyebilirsiniz.

Kod içerisinde bir akış nasıl gerçekleşir?

Şöyle bir örnek ile başlayalım. Yaşlı dedemiz bizden ilaç istemektedir. Bizler de ilacı satın almak için eczaneye gideriz. Eczanede istediğimiz ilaç mevcut ise raflardan bize ilaç verilir. İlaç raflarda yoksa, eczane sahibi İlaç firmasından ilgili ilacın getirilmesini ister. Bu süreç sonrasında eczacı ilacı bize, biz de dedemize veririz. Yaşlı tonton dedemizde ilacını kullanır.:)

Bu bahsettiğim örnek üzerinden yukarıdaki şekilde de gördüğünüz gibi. Dedemiz View , Torun ViewModel , Eczane Repository , Raf Yerel Depo-Room , İlaç Firması Uzak Sunucu -Retrofit.

Bizler uygulamamızı geliştirirken View içerisinden kullanıcının eylemine göre ViewModel’dan ilgili metodu çağırırız. Metod içerisinde Repository’den çağırım gerçekleşir. Burada yazacağımız lojiğe göre verinin kaynağını belirleriz. Local’den veri alınacaksa DB ve DAO tanımlamalarından verilerimizi elde ederiz. Uzak sunucudan veri alınacaksa RetrofitClient ve APIService tanımlamalarından veriler temin edilir. Veriler elde edildikten sonra bu akışın tersi yönünde ViewModel içerisinde tanımlanan MutableLiveData değeri değiştirilir. View’de tanımladığımız Observer ile değişikliklerden haberdar olup, verileri tercihimize göre işleyebiliriz.

Genel olarak MVVM kafanızda şekillenmesi için örnekler üzerinden modellemeye ve açıklamaya çalıştım. Umarım okurken keyif almışsınızdır. Sağlıklı ve Mutlu Günleriniz olsun. Keyifli Kodlamalar.

--

--

Recep Yeşilkaya
Recep Yeşilkaya

Responses (1)