MVVM’e Hızlı Bir Giriş
Son yıllarda sıklıkla duyduğumuz hatta bazılarımızın yavaş yavaş projelerinde kullanmaya başladığı bir tasarım deseni MVVM. Bu yazıda MVVM’e hızlı bir giriş yapmak, kısaca MVVM deseninin temellerine ve avantajlarına değinmek istiyorum.
MVVM Nedir?
MVVM bir projenin “sorumlulukların ayrıştırılması” esasına göre geliştirilmesi temeline dayanan bir tasarım kalıbı sunmaktadır. Sorumlulukların ayrıştırılması, yani meslek hayatımızda kullandığımız karşılığıyla Separation of Concerns(SoC). MVVM bir yazılımı Model, View ve ViewModel adında üç farklı yapıda geliştirmemizi tavsiye etmektedir. Bu üç yapıyla ilgili kısa açıklamalara az sonra değineceğiz.
İlk olarak 2005 yılında John Gossman tarafından decoupling problemini çö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. Belki bazılarımızın kulağına yeni gelen bu tasarım deseninin aslında 10 seneye yakın bir geçmişi bulunmakta. Özellikle ülkemizde bu tarz gelişmelere biraz geç adapte olduğumuzu düşünürsek, MVVM’in sektörümüz için taze bir konu olduğunu söyleyebiliriz.
MVVM’in Temel Yapı Taşları
MVVM, Model, View ve ViewModel olmak üzere üç temel yapıdan oluşmaktadır. Kısaca bu yapıların neler olduğuna değinecek olursak:
Model: Veritabanından, web servislerinden ya da herhangi bir veri kaynağından gelen verilerimizi temsil etmek için kullanılan POCO ya da entity sınıflarından oluşmaktadır. Ayrıca veri tutarlığını ve doğruluğunu kontrol eden iş kuralları da burada yer almaktadı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, yani Model’i View’a bağlayan yapıdır. View ile Model arasında doğrudan bir etkileşim yoktur. View, ilgili işlemleri ViewModel üzerinden yapmaktadır. ViewModel’ın View’a direkt erişimi yoktur ve View ile ilgili hiçbir şey bilmez.
Bu üç bileşen arasında ne gibi etkileşimlerin olduğunu aşağıdaki basit grafik üzerinden rahatça görebiliriz.
Faydaları Nelerdir?
Daha önceden de bahsettiğimiz gibi MVVM’in biz yazılım geliştiricilere en büyük getirisi Separation of Concerns. Yani uygulamamızın içerisinde bulunan yapıları birbirinden ayrıştırarak, az bağlı bir yapı kurgulamamızı, görsel arayüz ile arka planda yer alan business yapıları, veriye erişim yapıları… gibi bileşenlerin birbirinden ayrışmasını sağlamaktadır. 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ı yakalar.
Görsel arayüzün ve kodun birbirinden ayrışması uygulamanın test edilebilirliğini arttırmakta ve TDD (Test Driven Development) açısından da kolaylıklar sağlamaktadır. Aynı zamanda bu ayrışımlar uygulamamızın bakımı da kolaylaştırmış 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 geliştirmeler rahatlıkla yapılabilir. Aslında MVVM’in avantajı olarak anlattığımız özelliklerin çoğu Separation of Concerns yaklaşımının bize kazandırdıklarıdır.
MVVM’in en önemli uyarlamalarından birinin Knockout.js olduğunu söyleyebiliriz. Günümüzde bu kütüphane kullanılarak MVVM destekli birçok web uygulamasının geliştirildiğini görebiliriz. Bunun yanında .NET platformunda WPF ve Windows Phone uygulamalarında da MVVM deseni sıklıkla kullanılmaktadır.
1 Comment
xm
25 Ekim 2018 at 23:32Kafamda oturtamıyordum, bu faydalı oldu. Teşekkürler.