Son birkaç yıldır çok popüler olan ve uzun süredir kullanıp da hakkında yazma fırsatım olmayan MVVM’e hızlı bir giriş yapmak istiyorum. İlk kez MVVM ile tanışanlar için konunun anlaşılabilir olması açısından olabildiğince giriş seviyesinde tutmaya çalışacağım.
M-V-VM ( Model- View-ViewModel) deseninin geçmişine baktığımızda John Gossman tarafından 2005 yılında decoupling problemini çözmek için ortaya atıldığını görüyoruz. Hatta o zamanlardaki MVVM’e giriş yazısına da buradan ulaşabilirsiniz. Her ne kadar MVVM için son zamanlarda popüler oldu desek de aslında yaklaşık yedi senelik bir geçmişe sahip. İşte o zamanlar WPF’in Avalon olduğu zamanlara tekavül ediyor:) Özellikle buna Türkiye’de ki yazılım geliştirme süreçlerini düşünürsek, evet bizim için gerçekten yeni sayılır aslında.
Size birisi neden MVVM diye sorduğunda söylemeniz gereken en önemli şey Seperation of Concern olmalıdır. Bu kavramı kısaca özetlemek gerekirse uygulama içerisindeki işlerin ayrı geliştirilmesini benimseyen bir modeli vardır. Tasarımcı ile geliştiricinin aynı proje üzerinde birbirinden bağımsız bir şekilde çalışabilmesi ise buna en güzel örneklerden birisidir.
MVVM, Model- View - ViewModel olacak şekilde üç temel yapıdan oluşmaktadır. Kısaca bu yapıların neler olduğuna değinecek olursak:
Model: Veritabanından ya da web servislerinden gelen verilerimizi temsil etmek için kullanılan POCO ve entity sınıflarından oluşmaktadır.
ViewModel: ViewModel ise görsel arayüz ile model arasında köprü görevi görmektedir. View ile Model arasında doğrudan bir iletişim yoktur. View ilgili işlemleri ViewModel üzerinden yapmaktadır.
MVVM hakkında temel bilgileri edindikten sonra gelelim faydalarına. İlk başta da dediğimiz gibi seperation of concerns kavramını sağlıyor. Bu sayede yazılım geliştiriciler ve arayüz tasarımcıları aynı proje üzerinde birbirinden bağımsız bir şekilde eş zamanlı olarak çalışabilme imkanını yakalıyorlar. Bunun yanı sıra TDD (Test Driven Development) açısından bakarsak görsel arayüzümüz ile kodumuz ayrıldığı için kolaylıkla test edilebilir hale geliyor. Aynı zamanda uygulamamızın bakımı da kolaylaşmış oluyor. Model tarafında bir değişiklik yapılmak istendiğinde UI tarafında hiçbir değişiklik yapılmasına gerek kalmadan gerçekleştirilebilir.
MVVM sayesinde WPF’in en güçlü özelliklerinden ikisi olan data binding ve commanding sisteminden faydalanarak XAML tarafında kolaylıkla işlemler gerçekleştirilebiliyor. Faydalardan bir diğeri de genişletilebilir uygulamalar geliştirilebiliyor olmasıdır. Yeni bir özellik ekleyeceğimiz zaman bu, yeni bir ekran (View) ve yeni bir modül (ViewModel) eklemek kadar kolay.