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.

MVVM Nedir?

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.

Neden MVVM?

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’in Temel Yapı Taşları

MVVM, Model- View - ViewModel olacak şekilde üç temel yapıdan oluşmaktadır. Kısaca bu yapıların neler olduğuna değinecek olursak:

MVVM

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.

View: Bu kısım verilerimizi son kullanıcılara aktardığımız görsel arayüzdür. Son kullanıcı ile uygulama arasında bir köprü görevi görü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.

Faydaları Nelerdir?

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.

Kod tarafına baktığımızda, yazmış olduğumuz ViewModel sınıflarını tekrar tekrar projelerimizde kullanabilmekteyiz. Hatta Silverlight ve Windows Phone gibi farklı teknolojilerde bile kullanabiliriz. Günümüzde MVVM artık pek çok teknolojide kullanılmaya başlandı. WPF, Silverlight ve Windows Phone’un yanı sıra javascript tarafında Knockout.js kütüphanesi ile web tarafında MVVM deseni kullanılıyor. Ayrıca Microsoft tarafında da Visual Studio ve Expression Blend gibi güçlü bir tool desteği bulunmakta. MVVM ile ilgili söyleyebileceklerim özetle bunlar. İlerleyen zamanlarda örneklerle daha detaylı inceliyor olacağız.

About the Author