Veysel Uğur KIZMAZ

MVC Pattern ve Asp.Net MVC Nedir? Asp.Net MVC vs Web Forms

20.10.2013Okunma Sayısı: 31232Kategori: ASP.NET MVC

MVC Nedir?

MVC, Yazılım Mühendisliği’nde önemli bir yere sahip architectural patterns (yazılım mimari desenleri)’ın bir parçasıdır. Model, View ve Controller kelimelerinin baş harflerinden oluşan MVC (Model-View-Controller), 1979 yılında  Tygve Reeskaug tarafından oluşturulmuş ve yazılım gelişmede bir çok projede kullanılmıştır. Son dönemlerde Microsoft’un MVC desenini Asp.Net teknolojisi ile birleştirmesi ile popülaritesi daha da artmıştır.

MVC ile ilgili en yanlış bilgi, MVC’nin Microsoft tarafından çıkartıldığı düşüncesidir. Yukarıdaki paragrafta da bahsedildiği üzere, MVC’nin Asp.Net’e entegre edilmesinden önce bu deseni bir çok (.Net) yazılım geliştiricisi bilmemekteydi, bilse de kullanmıyorlardı. Asp.Net MVC’nin gelişiminin ardından MVC’ye ilgi oldukça artmış görünüyor.

MVC deseni, 3 katmandan oluşmaktadır ve katmanları birbirinden bağımsız (birbirini etkilemeden) olarak çalışmaktadır. Bu sebeple çoğunlukla büyük çaplı projelerde projelerin yönetiminin ve kontrolünün daha rahat sağlanabilmesi için tercih edilmektedir. MVC ile geliştirilen projelerde projenin detaylarına göre bir çok kişi eş zamanlı olarak kolaylıkla çalışabilmektedir.

MVC Tasarım Deseni Model-View-Controller hiyerarşisi

Model Nedir?

Model, MVC’de projenin iş mantığının (business logic) oluşturulduğu bölümdür. İş mantığıyla beraber doğrulama (validation) ve veri erişim (data access) işlemleri de bu bölümde gerçekleştirilmektedir.

Model tek katmandan oluşabileceği gibi kendi içinde birden fazla katmandan da oluşabilir. İç yapılandırma projenin büyüklüğü ile yazılım geliştiricinin planlamasına kalmış bir durumdur. Eğer proje büyük çaplı ise modeli birden çok katmana ayırmak projenin yönetimi açısından faydalı olacaktır.

View Nedir?

View, MVC’de projenin arayüzlerinin oluşturulduğu bölümdür. Bu bölümde projenin kullanıcılara sunulacak olan HTML dosyaları yer almaktadır. Projenin geliştirildiği yazılım dillerine göre dosya uzantıları da değişebilmektedir. Projelerin büyüklüğüne göre dikkat edilmesi gereken bir nokta ise, klasörlemedir.

Eğer bir web projesi geliştiriyorsanız, projenin View’larının yer aldığı klasörlerinin hiyerarşisi, ilerleyen dönemlerde karmaşıklığa sebep olmaması için dikkatli yapılmalıdır. Kimi yazılım geliştiriciler web projelerinde HTML dosyaları ile Javascript, CSS ve resim dosyalarını aynı klasör içinde barındırmaktadır. Ufak bir ayrıntı gibi görünse de projenin ilerleyen dönemlerinde ciddi problemler oluşturmaktadır.

View’ın bir görevi de, kullanıcılardan alınan istekleri controller’a iletmektir.

Controller Nedir?

Controller, MVC’de projenin iç süreçlerini kontrol eden bölümdür. Bu bölümde View ile Model arasındaki bağlantı kurulur. Kullanıcılardan gelen istekler (request) Controller’larda değerlendirilir, isteğin detayına göre hangi işlemlerin yapılacağı ve kullanıcıya hangi View’ın döneceği (response) belirtilir.

MVC’nin Çalışma Prensibi

MVC’nin parçaları olan Model, View ve Controller’ın ne olduğu yukarıdaki bölümde anlatıldı. Şimdi bu bilgileri toparlayıp MVC’nin çalışma prensibini (yaşam döngüsünü) detaylıca inceleyelim.

MVC’nin çalışma mantığı özetle aşağıdaki görselde tanımlanmıştır. Hemen altında madde madde açıklaması yer almaktadır. (Kullanıcı: siteyi kullanan kişi)

MVC Çalışma Mantığı - Yaşam Döngüsü

  1. Kullanıcı sayfa üzerinden bir istek gönderir. (İstek: Request)
  2. İstek, ilgili Controller’da değerlendirilir ve hangi model ile ilgiliyse o modelde (ve veritabanında) işlemler yapılır. Controller ile Model arasında çift yönlü ok olmasının sebebi, isteğin çalıştırılma sürecinde Controller üzerinden farklı modellerin çağırılabillmesidir.
  3. Controller üzerinde Model işlemleri tamamlandıktan sonra bilgiler View üzerine yerleştirilir.
  4. View’a yerleştirilen bilgi kullanıcıya yanıt olarak gönderilir (Yanıt: Response). Böylelikle kullanıcının yaptığı bir istek MVC ile geliştirilmiş olan uygulamamız içerisinde başarıyla işlenip sonucu kullanıcıya sunulur.
  5. Controller, gelen isteğe göre Model’e uğramadan gerekli verileri hazırlayıp direk View’a bu bilgileri yerleştirip kullanıcıya yanıtı dönebilir.

Asp.Net MVC Nedir?

Asp.Net MVC, Microsoft’un Asp.Net teknolojisi üzerine MVC tasarımını giydirmesi ile oluşturduğu yeni bir yapıdır. Bu yapı sayesinde büyük çaplı projelerde (eğer desene uygun şekilde çalışılırsa) projenin yönetimi kolaylaşacak, yazılımın performansında artış görülebilecek, yazılan kodların yeniden kullanımı (reusable) artacağından hem daha hızlı yazılım geliştirme yapılabilecek, hem de testleri daha kolaylaşacaktır. Asp.Net MVC öğrenmek ve bu teknolojiyle yazılım geliştirmek için daha bir çok neden sıralayabiliriz.

Microsoft Web Teknolojileri Gelişim Grafiği

Asp.Net MVC, Asp ile başlayan Microsoft web platformu yazılım geliştirme teknolojilerinin şu anda geldiği son noktadır. Günümüzde Asp teknolojisini kullanan proje sayısı gitgide azalmakta ve projenin kapsamına, içinde kullanılması gereken teknolojilerine, yazılım geliştiricilerin alışkanlıklarına ve bazı gereksinimlere göre Asp.Net ve Asp.Net MVC teknolojilerinden birisi kullanılmaktadır.

Asp.Net vs Asp.Net MVC

“Asp.Net Web Forms ve Asp.Net MVC teknolojilerinden hangisini seçmeliyiz ve neden?” sorusu, yazılım geliştiricilerin sıklıkla sorduğu bir sorudur. Asp.Net Web Forms ve Asp.Net MVC teknolojilerinin avantajlarını ve dezavantajlarını inceleyelim. İnceleme sonucunda projeleriniz ve altyapınız (donanım, yazılım, yazılım geliştirici vs) hangi teknolojiye daha uygunsa onunla yazılım geliştirmenizde fayda vardır. Tüm bu seçenekleri incelemeden teknoloji seçimi yapmak, bazı projeleri çok büyük ölçüde yönetim, zaman ve performans sıkıntısıyla karşı karşıya bırakmıştır.

Neden Asp.Net Web Forms Teknolojisini Seçmeliyim?

Asp.Net Web Forms’un Asp.Net MVC’ye üstünlük sağladığı konular:

ViewState Kullanımı

Web Forms için önemli derecede performans kaybı yaşatan ViewState, farklı açıdan bakıldığında yazılım geliştiricinin sayfa içinde tutması gereken değerleri/verileri kaybetmemek için sıklıkla kullandığı bir yöntemdir. ViewState kullanımı sırasında çok büyük veriler saklanmadığı sürece bu konu Web Forms için avantaja dönüştürülebilir.

Rich Server Controls (Zengin Sunucu Kontrolleri)

Asp.Net Web Forms’ta MVC’den farklı olarak sunucu taraflı çalışan kontroller yer almaktadır (Button, Label, TextBox, GridView, ListView, ScriptManager vs). Bu hazır kontroller sayesinde bir çok işlem kolaylıkla gerçekleştirilebilmektedir. ScriptManager sayesinde daha az Javascript bilgisiyle AJAX işlemleri kolaylıkla yapılabilir, sunucu kontrollerinin sürükle-bırak özelliği sayesinde daha az HTML kodu kullanarak sayfalar geliştirilebilir.

Event Driven Programming (Olay Güdümlü Programlama)

Asp.Net Web Forms’ta yer alan event driven programming yapısı, yazılım geliştiricinin işini çok kolaylaştırmaktadır. Örneğin sayfaya eklediğiniz bir butona tıklama olayı tanımlamak için butona iki kere tıklamanız yeterli olacaktır. Bu yapı eğer dikkatli bir şekilde kullanılırsa yazılım geliştiriciye büyük kolaylık sağlamaktadır. Oluşturulan olay (event) metodu içerisinden Asp.Net’in diğer sunucu kontrollerine erişip içerisindeki verilere müdahale edebilirsiniz.

Neden Asp.Net MVC Teknolojisini Seçmeliyim?

Asp.Net Web MVC’nin Asp.Net Web Forms’a üstünlük sağladığı konular:

Performans

Asp.Net MVC’de ViewState kavramı bulunmadığı için durum yönetimi yazılım geliştirici tarafından yapılmak durumundadır. Web Forms’ta durum yönetimleri otomatik olarak yapıldığından dolayı sayfaların performansı Asp.Net MVC sayfalarına göre daha düşüktür.

Reusability (Yeniden Kullanılabilirlik)

Asp.Net Web Forms’ta sayfa içerisine yazılan kodlar (sunucu taraflı) o sayfaya ya da kontrole özgü olmak durumundadır. Asp.Net MVC’de yazılan kodlar ise kontrollerden tamamen bağımsız olduğu için birden çok yerden aynı kod çağırılıp kullanılabilmektedir. Bu da kodların yeniden yazılmasının önüne geçer.

Test Driven Development

Asp.Net MVC’de yazılan kodlar kontrollere ya da sayfaya özgü olmadığı (bağımsız yazıldığı) için kolaylıkla test edilebilir durumdadır. Bu sebeple Asp.Net MVC ile geliştirilen projeler Test Driven Development’a uygundur.

Yazılım Geliştirme Süresi Daha Kısa

Katmanlar birbirinden farklı olduğundan farklı yazılım geliştiriciler farklı katmanlarda aynı işlem için eş zamanlı olarak kodlama yapabilirler. Örneğin bir kişi yapılacak işlemin Modelini kodlarken biri Controllerı bir diğeri de View katmanını eş zamanlı olarak kodlayabilir. Asp.Net Web Forms’ta bir işlem için sadece bir kişinin kodlama yapması uygundur.

Kontrollerin Yönetimi İçin Client Side Development (İstemci Taraflı Geliştirme)

Sayfa içerisine yerleştirilen HTML kontrollerinin yönetimi ve sunucuya istek gönderimi için Asp.Net MVC’de Javascript ve Javascript tabanlı istemci taraflı teknolojiler kullanılmaktadır.

Sonuç

Sonuç olarak MVC uzun yıllardır bir çok projede kullanılmış ve (yönetimi ve  yazılım geliştirme ekibi başarılı ise) başarılı olmuş bir desendir. Bu desen Asp.Net teknolojisiyle birleşip gün geçtikçe gelişen bir yapı (Asp.Net MVC) haline gelmiştir.

Asp.Net Web Forms ve Asp.Net MVC teknolojileri arasındaki seçim için, yukarıda da bahsedildiği gibi projeleriniz ve altyapınız (donanım, yazılım, yazılım geliştirici vs) hangi teknolojiye daha uygunsa onunla yazılım geliştirmenizde fayda vardır.

Bu makale, Asp.Net ve Asp.Net MVC ile ilgili soru ve sorunlarınızla ilgili benimle veysel@ugurkizmaz.com adresi üzerinden iletişime geçebilirsiniz.