13 Temmuz 2014 Pazar

ASP.NET MVC Framework'üne Giriş

 Merhabalar. Bu yazımda sizlere Microsoft'un geliştiricilere taa 2009 tarihinde sunduğu fakat birçok kişinin Web Forms kullanmaya alıştığı için yeni bir teknolojiye alışmaktan çekindiği, zaman ayırmak istemediği için çalıştırmaya geçiştirdiği  MVC Framework'ünden kısa bir şekilde bahsedeceğim.

MVC denince akla ne kadar ASP.NET gelse de aslında 1970'lerde Smalltalk-76 içerisinde tanıtılmıştır. MVC (Model-View-Controller) bir uygulamayı 3 ana bileşene (model, view, controller) ayıran mimarisel bir şablondur. ASP.NET MVC framework'ü, MVC şablonunu temel alan Web uygulamaları oluşturmak için ASP.NET Web Forms modeline bir alternatif olarak ortaya çıkmıştır. Hafif (lightweight) ve test edilebilirliği yüksek olan ASP.NET MVC framework'ü, master sayfaları ve üyelik temelli kimlik doğrulama sistemi gibi mevcut ASP.NET özellikleri ile bütünleşmiştir. MVC framework'ü System.Web.Mvc namespace'inde tanımlanmıştır ve Sytem.Web'in temel ve destekleyici bir elemanıdır.

MVC framework aşağıdaki bileşenleri içerir:



  • Model: Data logic kısmı burada ele alınır. Model nesneleri genellikle veritabanındaki bir modeli SELECT edip getiriler veya INSERT INTO şeklinde depolarlar. Örneğin bir Ürün nesnesi, veritabanından ilgili ürün bilgisini getirebilir, işleyebilir, ve güncellenen bilgiyi tekrar Ürünler tablosuna yazabilir.
  • View: Uygulamadaki kullanıcı arayüzünü (UI) görüntüleyen bileşenlerdir. Genellikle bu bileşenler UI model verilerinden yaratılır. Önceki örneğimizdeki Ürünler tablosunun güncelleme ekranını örnek olarak verebiliriz. Bu ekranda, o anki Ürün nesnesini temel alan Textbox'lar, Drop-down list'ler, Checkbox'lar bulunur.
  • Controller: Kullanıcı etkileşimlerini alıp model ile birlikte çalışan ve sonunda bu verileri görüntüleyecek view'ı seçen elemanlardır. Bir MVC uygulamasında view sadece bilgileri görüntülemeli, controller ise kullanıcı girdilerini alıp ve ona göre kullanıcıya bir cevap döndürmelidir. Örneğin  bir controller, sorgu kelimelerini alır ve bu değerleri modele ileterek veritabanında sorgu işlemlerinin gerçekleştirilmesine ön ayak olur.


MVC şablonu, uygulamanın farklı katmanlarını (input, business ve UI logic) birbirinden ayırarak uygulamalar oluşturmanıza olanak tanır. Bu şablon hangi tür katmanın, uygulama içerisinde nerede duracağını belirler. Örneğin UI katmanı view'a, businnes katmanı ise model'a aittir. Böyle bir ayrımın sağlanması ile bir uygulama oluşturulurken oluşan karmaşıklığın azaltılması sağlanır. Çünkü belirli bir anda işin yalnızca belirli bir cephesinde çalışıyor olursunuz. Örneğin business katmanına bağımlı olmadan yalnızca view katmanı ile ilgilenebilirsiniz.


MVC şablonu oluşacak karmaşıklığın kolayca yönetilmesine ek olan bir diğer özelliği de Web Forms'dan daha kolay bir şekilde test uygulamaların oluşturulmasını sağlamasıdır.

Örneğin bir Web Forms uygulamasında, tek bir sınıf hem kullanıcı girdisine cevap vermek hem de çıktıyı görüntülemek için kullanılır. Bundan dolayı Web Forms uygulamalarına otomatik testler yazmak karmaşık hale gelebilir. Çünkü tek bir sayfayı test etmek için bile, o sayfanın sınıfına bağımlı tüm çocuk kontrollerin ve diğer tüm ek sınıfların bir nesnesini oluşturmak zorunda kalırsınız. Çünkü sayfayı çalıştırdığınızda birçok sınıftan nesne üretilir, böylelikle uygulama içerisindeki bağımsız parçaların testini yazmak oldukça güçleşir. Dahası, Web Forms uygulamalarındaki testler bir Web sunucusunun var olmasını gerektirir.


MVC framework ise bileşenleri birbirinden ayırır ve büyük ölçüde interface'lerin kullanılmasını sağlar. Böylece uygulamanın diğer bileşenlerinden bağımsız olarak bileşenler ayrı ayrı test edilebilir.

Ayrıca bir MVC uygulamasının 3 ana bileşene ayrılması ile paralel geliştirim yapılabilir. Örneğin bir geliştirici view'da, diğeri controller'da çalışırken bir diğeri ise model ile ilgilenebilir.

Web Forms ile mi Yoksa MVC Framework ile mi Uygulama geliştirmeliyim?


Bir Web uygulaması oluştururken "MVC framework ile yazarsam uygulama karmaşıklığı azaltırım ama Web Forms kullanırsam kısa sürede projeyi biritirim" diye düşünüyorsanız bu ikisi arasında karar vermek için iyi düşünmelisiniz.

Belirli bir Web sitesi için MVC mi yoksa Web Forms mu kullanacağınıza karar vermeden önce her iki yaklaşımın da avantajlarına bakalım.

MVC'nin Avantajları

  • Uygulamanın model, view ve controller'a ayrıştırılması ile karmaşıklığı yönetmek daha kolaydır.
  • View state veya server-temelli form'lar kullanmaz. Böylece bir uygulamanın tüm kontrolünü geliştirici ele alabilir. Bu yüzden geliştiriciler için idealdir.
  • Web uygulamasından gelen istekleri tek bir kontrolcü üzerine devralmak için bir Front Controller kalıbı kullanır. Böylelikle zengin bir yönlendirme altyapısı oluşturmayı mümkün kılar. Front Controller hakkında daha fazla bilgi için MSDN sayfasına bakabilirsiniz.
  • Test-güdümlü geliştirimi daha iyi destekler.
  • Uygulamanın davranışları üzerinde daha fazla kontrole sahip olmak isteyen büyük geliştirici ve Web tasarımcısı ekipleri için destek sağlar.

Web Forms'un Avantajları


  • HTTP üzerinden state'leri koruyan bir event modeli sunar. Böylece Web uygylamalarının geliştirimini kolaylaştırır. Web Forms-temelli uygulamalar, yüzlerce sunucu kontrollerinde bulunan düzinelerce event sunar.
  • Sayfaların ayrı ayrı fonksiyonellik sağlamasını sağlayan Page Controller kalıbını kullanır. Page Controller hakkında daha fazla bilgi için MSDN sayfasına bakabilirsiniz. 
  • State bilgisinin yönetimini kolaylaştıran view state veya sunucu-temelli form'lar kullanır.
  • Hızlı uygulama geliştirimi için geniş yelpazedeki bileşenlerden yararlanmak isteyen küçük çaplı Web geliştiricilerinin veya tasarımcılarının bulunduğu ekip için idealdir.
  • Genellikle uygulama geliştirimi daha kolaydır, çünkü Page sınıfı, kontroller vb. bileşenler birbiriyle sıkı bir şekilde bütünleşmiştir ve genellikle MVC modelinden daha az kod yazılarak uygulamalar oluşturulabilir.


ASP.NET MVC Framework'ünün Özellikleri

  • Uygulamadaki katmanlar (input, business, UI), test edilebilirlik ve test-güdümlü geliştirim ön-tanımlı olarak ayrılmıştır. MVC framework'teki tüm önemli contract'lar interface temellidir ve uygulama içerisindeki gerçek objelerin davranışlarını taklit eden mock objeler kullanılarak bu contract'lar test edilebilir. Bir ASP.NET sürecindeki kontrolleri çalıştırmak zorunda kalmadan, hızlı ve esnek bir şekilde unit-test uygulaması çalıştırabilmesini ve .NET ile uyumlu herhangi bir unit testing framework'ünü kullanabilmesini sağlar.
  • Genişletilebilir ve takıp-çıkarılabilir bir framework'tür. MVC'deki bileşenler kolayca değiştirilebilir ve özelleştirilebilir şekilde tasarlanmıştır. Kendi view motorunuzu, URL yönlendirme politikanızı, action-method parametre serileştiriminizi ve diğer bileşenlerinizi entegre edebilirsiniz. Ayrıca MVC, Dependency Injection (DI) ve Inversion of Control (IOC) container modellerini destekler. Nesnenin kendisini üretmek için sınıfı bağımlı olmak yerine DI, objelerin bir sınıfın içine katılmasına olanak tanır. IOC ise bir nesne için diğer bir nesne gerektiğinde, ilk nesnenin ikinci nesneyi konfigürasyon dosyası gibi bir harici kaynaktan alması gerektiğini belirler. Bu şekilde testing daha kolay hale gelir.
  • Daha anlaşılır ve search edilebilir uygulamalar oluşturmanızı sağlayan güçlü bir URL-eşlemeli bileşen sunar. URL'ler, .htm, .php veya .aspx gibi dosya isimi uzantılarına sahip olmak zorunda değildir ve arama motoru optimizasyonu (SEO) ile representational state transfer (REST) adresleme gibi  URL isimlendirme kalıplarını desteklemek için tasarlanmışlardır.
  • Markup kullanımını mevcut ASP.NET sayfalarında (.aspx), user control'lerde (.ascx) ve master page'lerde (.master) desteklemek için, markup dosyaları view şablonlarışeklinde kullanılır. İçiçe master sayfaları, in-line ifadeler (<%= %>), declarative server kontrolleri, template'ler, data-binding, localization vs. gibi mevcut ASP.NET özellikleri MVC framework'ü ile kullanılabilir.
  • Halihazırdaki ASP.NET özelliklerinin kullanılmasu için de destek verilmiştir. MVC framework'ü, forms kimlik doğrulama ve Windows kimlik doğrulama, URL yetkilendirme, üyelik ve roller, çıktı ve veri önbellekleme, oturum ve profil durumu yönetimi, health monitoring, yapılandırma sistemi, ve sağlayıcı mimarisi gibi özellikleri kullanmanıza olanak tanır.

Özetle, kısa süreli kullanılacak, bakımı yapılmayacak, küçük çapta projeler üretmek istiyorsanız Web Forms kullanmaya devam edebilirsiniz. Ancak yüksek performans gerektiren, büyük çaptaki iş projeleri için MVC Framework tam bir biçilmiş kaftandır.


Tüm firmaların personel alımı yaptığı bu günlerde ASP.NET yanında MVC Framework ile uzmanlaşılırsa iyi oranda farklılık yaratılacağı düşüncesindeyim. Bu nedenle MVC Framework'ü daha detaylı bir şekilde araştırmak isteyebilirsiniz.

Sonraki yazımda görüşmek üzere..

Kaynaklar: ASP.NET

Hiç yorum yok:

Yorum Gönder