MVVM: Arayüzü Mantıktan Ayıran Tasarım Deseni
Sözlük

MVVM: Arayüzü Mantıktan Ayıran Tasarım Deseni

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 3 dk okuma

MVVM, arayüz kodunu veri ve iş mantığından ayıran bir tasarım desenidir. Model, View ve ViewModel rolleri, çalışma mantığı ve kısa bir örnek.

MVVM mimarisi nedir?

MVVM (Model-View-ViewModel), kullanıcı arayüzü olan uygulamalarda kodu üç role ayıran bir mimari desendir. Model veriyi ve iş kurallarını, View ekranda görünen arayüzü, ViewModel ise bu ikisi arasında duran ve ekranın durumunu tutan katmanı temsil eder.

Amaç, arayüz kodunu iş mantığından ayırmaktır. Böylece ekran değişse bile mantık bozulmaz, mantık test edilmek istendiğinde arayüzü ayağa kaldırmak gerekmez. Desen masaüstü, web ve özellikle mobil uygulama geliştirmede yaygın kullanılır.

Üç rol ne yapar?

  • Model: Verinin kendisi ve onu işleyen kurallar. Sunucudan gelen kayıtlar, veritabanı nesneleri ve iş kuralları burada yer alır. Arayüzü bilmez.
  • View: Kullanıcının gördüğü ve etkileştiği kısım. Ekranı çizer, kullanıcı eylemlerini ViewModel'e iletir. Mümkün olduğunca az mantık taşır.
  • ViewModel: Ekranın hangi durumda olduğunu tutar (yükleniyor, hata, liste dolu gibi) ve View'ın göstereceği veriyi hazırlar. Model'den veri alır, View'a doğrudan referans vermeden durumunu yayımlar.

Bu ayrımın kilit noktası yön kuralıdır: View, ViewModel'i izler; ViewModel, View'ı tanımaz.

Basit bir örnek: sipariş listesi ekranı

Örneğin bir sipariş listesi ekranı düşünelim. Kullanıcı ekranı açtığında View, ViewModel'e yükleme isteği iletir. ViewModel durumu 'yükleniyor' yapar, Model katmanından siparişleri ister. Veri gelince durum 'liste dolu' olur ve sipariş listesi yayımlanır. View bu durumu izlediği için kendini otomatik günceller. Hata olursa durum 'hata' olur ve View bir mesaj gösterir.

Bu akışta View'ın içinde veri çekme ya da hata kararı yoktur. Aynı ViewModel'i, ekranı çizmeden birim testle sınamak mümkündür: istek gönder, durum değişimini doğrula.

MVVM, MVC ve MVP ile farkı

MVC'de Controller, kullanıcı girdisini alıp Model ve View arasında koordinasyon yapar; pratikte arayüz ve denetleyici kodu kolayca iç içe geçebilir. MVP'de Presenter araya girer ve View ile birebir konuşur. MVVM'de ise ViewModel View'ı doğrudan çağırmaz; View onun yayımladığı duruma bağlanır (veri bağlama ya da gözlemlenebilir durum). Bu, View ile mantık arasındaki bağı gevşetir.

Desenlerin hiçbiri kesin üstün değildir; ekibin kullandığı çerçeve ve uygulamanın karmaşıklığı seçimi etkiler.

Sık yapılan hatalar

  • ViewModel'in View'a ya da bir ekran bileşenine doğrudan referans tutması; bellek sızıntısına ve test zorluğuna yol açar.
  • Tüm iş mantığını ViewModel'e yığmak; ViewModel şişer. Kurallar ayrı bir katmanda toplanmalıdır.
  • View'ın içinde veri çekme ya da karar verme mantığı bırakmak.
  • Durumu dağınık tutmak: aynı ekranın durumu birden çok yerde olursa tutarsızlık doğar. Tek ve açık bir durum modeli tercih edilir.
  • Her ekran için gereksiz soyutlama eklemek; küçük uygulamada desen yük olabilir.

MVVM ve katmanlı mimari birlikte nasıl kullanılır?

MVVM yalnızca sunum katmanını düzenler. Daha büyük uygulamalarda bunun arkasında alan katmanı (iş kuralları ve kullanım senaryoları) ve veri katmanı (repository, sunucu ve yerel depolama) bulunur. Bu bütünlüğe temiz mimari yaklaşımı denir; MVVM onun sunum katmanına karşılık gelir.

Mindset programlarında MVVM

Mindset kataloğundaki Android Uygulama Mimarisi (MVVM, Clean Architecture) programı; mimari ilkeler ve modül yapısı, alan katmanı ve kullanım senaryoları, veri katmanı ve repository deseni, sunum katmanı ve durum yönetimi, bağımlılık enjeksiyonu ve test stratejisi modüllerini içerir.

İlgili Mindset programı

Android Uygulama Mimarisi (MVVM, Clean Architecture)

Sık sorulanlar

Sık sorulan sorular

MVVM yalnızca Android'de mi kullanılır?

Hayır. Desen Microsoft'un masaüstü arayüz çerçevelerinden yaygınlaşmıştır ve bugün web, iOS, Android ve çok platformlu arayüz çerçevelerinde de kullanılır. Platform değişse de ana fikir aynıdır: arayüzü durumdan ayır, durumu test edilebilir bir katmanda tut.

ViewModel ile Presenter arasındaki fark nedir?

Presenter View'ı doğrudan çağırarak ekranı günceller; View ve Presenter birbirini tanır. ViewModel ise View'ı tanımaz, yalnızca durumunu yayımlar ve View bu duruma bağlanır. Bu fark, ViewModel'i arayüz olmadan test etmeyi ve aynı mantığı farklı ekranlarda yeniden kullanmayı kolaylaştırır.

MVVM her projede şart mı?

Değil. Çok küçük ve kısa ömürlü bir uygulamada ek katmanlar gereksiz yük getirebilir. Ekran sayısı arttıkça, mantık karmaşıklaştıkça ve test beklentisi yükseldikçe desenin faydası belirgin hale gelir. Karar, uygulamanın beklenen ömrüne ve ekibin büyüklüğüne göre verilir.

MVVM'de test nasıl yapılır?

ViewModel arayüzden bağımsız olduğu için birim testle doğrudan sınanır: sahte bir veri kaynağı verilir, bir eylem tetiklenir ve ViewModel'in yayımladığı durumun beklenen sırayı izlediği doğrulanır. View ise ayrıca, daha az sayıda arayüz testiyle kontrol edilir.

MVVM Mimarisi Nedir? Model, View, ViewModel