Nedir Bu MVVM ?. Herkese Selamlar, Bugün sizlere… | de Recep Yeşilkaya | Noviembre de 2020

Herkese Selamlar, Bugün sizlere android’de birçok projede kullanılan design patternler den olan MVVM’i konuk edineceğiz.

Tarihçesine bakacak olursak;

İlk olarak 2005 yılında John Gossman tarafından problemas de desacoplamiento çözmek için ortaya atılan MVVM deseni aslında Martin Fowler’ın Presentation Model deseninin 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şkiyi yönlendirdiğimiz bir bir tasarım kalıbı (patrón de diseño) sunmaktadır.

Design Patternler yazılım projelerinde sürekli karşılaşılan benzer sorunlardan yola çıkarak Code Optimizationı en iyi şekilde kurgulayabilmemize olanak tanıyan yapıdır.

Şö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. Birbirlerinden farklı tatlara sahip olduğu için ayrıştırılması gerekir.

Ne kadar doğru bir örnek olduğu tartışılabilir 🙂 Aynı bu şekilde bizler de kodlarımızı geliştirken dikkat etmemiz gereken nokta her biri farklı amaçlara hizmet ettiği için ayrıştrekirılmas.

Patrón de diseño (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 farklı alanları sürekli değiştirmektense, ilgili katmanda değişiklik yaparak proje geliştirilmesini kolaylaştırır.

Su 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-> Model-View-ViewModel dan oluşmaktadır.

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

Ver: Kullanıcının etkileşimde bulunduğu önyüzlerin (Actividad, Fragmento) içerdiği kodların bulunduğu sınıflardır. Bu sınıflarda lojik işlemler yapılmaz. Kullanıcı ile ekran arasındaki işlemler gerçekleştirilir.

ViewModel: Ver ile Model’ler arasındaki iletişimi sağlayan sınıflardır. Bu sınıflar’da lojik işlemler gerçekleştirilir. View’den istek atılır ve ViewModel por belirli lojikler ile real kaynakları sağlanır. Bu katmanda oluşturduğumuz LiveData’lar ile değişiklikleri gözlemleyip sonuçları view’de listeleyebilir veya işleyebiliriz. ViewModel içerisinde onCleared () methodu ile işlemlerinizi temizleyebilirsiniz.

Şöyle bir örnek ile başlayalım, Yaşlı dedemiz bizden ilaç istemektedir. Bizlerde 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, bizde 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, Repositorio Eczane, Raf Yerel Depo-Room, İlaç Firması Uzak Sunucu -Retrofit.

Bizler uygulamamızı geliştirirken Ver içerisinden kullanıcının eylemine göre Ver modelo dan ilgili methodu çağırırız. Metot içerisinde Repository den çağırım gerçekleşir. Burada yazacağımız lojiğe göre verinin kaynağını belirleriz. Local den real alınacaksa DB ve DAO tanımlamalarından verilerimizi elde ederiz. Uzak sunucudan real 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. Ver tanımladığımız Observer ile değişiklikleri yakalayıp 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 ..

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *