Nedir? Ne zaman çıktı? Sürümleri? Nasıl Kullanılır?
.NET
Framework ile ilk günden itibaren web uygulamları geliştirmek için
ASP.NET WebForms kullanılmaktaydı. ASP.NET WebForms alt yapısının
genişleyebilir
yapısından faydalanarak geliştirilmiş açık kaynak kodlu ya da ticari
MVC alt yapıları mevcuttu.Farklı platformlarda ya da open source bazı
projelerde MVC tasarım kalıbı deneyimine sahip yazılım geliştiriciler
tarafından Microsoft'dan MVC tasarım kalıbı desteği istenmekte ve
beklenmekte idi. Microsoft bu bekletiye karşılık Microsoft Ekim 2007'de
ASP.NET MVC Framework'den bahsetmeye başlatı (http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx) ve 2009 Nisan'ında da ASP.NET MVC Framework 1.0 release sürümü duyuruldu. (http://weblogs.asp.net/scottgu/archive/2009/04/01/asp-net-mvc-1-0.aspx)
ASP.NET
Framework 1.0 ile bir çok web sitesi/uygulaması geliştirildi. Ve
Microsoft web uygulaması geliştirme kanadında ki bilinen isimlerinin
blogları ve twitter gibi iletişim araçları ile MVC Framework üzerinde
ki desteklerinin devam ettiği gözlemlenirken Microsoft ASP.NET MVC
Framework 2'nin Preview 1 sürümünü duyurdu. (http://weblogs.asp.net/scottgu/archive/2009/07/31/asp-net-mvc-v2-preview-1-released.aspx)
ASP.NET
MVC Framework 1.0 ile 2 (evet 2.0 değil) birlikte çalışmaktadır.
Yukarıda verdiğim linklerde verilen nasıl kurulur bilgilerini tekrar
etmek niyetinde değilim. Visual Studio üzerine http://www.asp.net/mvc/download/ adresinden setup dosyasını indirerek yada Microsoft Web Platform Installer aracılığı ile kurabilirsiniz.
Microsoft ASP.NET MVC Framework açık kaynak kodludur.
Yani Microsoft geliştirdiği bu frameworkün kaynak kodlarını yazılım
geliştiricilere açmıştır. Burada ki stratejik kararları daha detaylı
değerlendirmek gerekir. Ancak MVC framework gibi bir ortamda çalışmayı
yeğleyecek kitlenin genellikle ALT.NET
diye nitelendirilen sadece Microsoft tarafından sağlanmış .NET
araç/kütüphane/frameworklerini kullanmayan open source sever camiasının
sempatisini kazandığı bir gerçektir.
Webforms'a ne olacak? WebForms kullanmayı bırakıp MVC mi kullanmamız gerekiyor?
ASP.NET
WebForms desteklenmeye devam edecektir. Ki zaten şu an piyasada
component desteği ve diğer 3.parti bileşenlere bakıldığında WebForms
için büyük bir destek mevcut, MVC Framework için bu destek büyüyene
kadar bir çok yeni projede halen WebForms tercih edilmeye devam edecek
MVC Framework ise alternatif oluşturacak ve projenizin gereksinimlerini
ve tercihlerinize göre uygun yapıyı seçebiliyor olacaksınız.
Peki neden MVC Framework ne sunuyor?
- ASP.NET
WebForms ile kullandığınız master page yapısını, kullanıcı
kontrollerini,session,membership vb yapıları kullanmaya devam
edebiliyorsunuz.
- ViewState yoktur. MVC Framework mimarisi ViewState mantığına ters düşmektedir.
- MVC
Framework HTML çıktısı üzerinde yazılım geliştiriciye tam kontrol
sunmaktadır. Bu webforms sayfasına bir webcomponenti ekledikten sonra o
kontrolün HTML çıktısının ne olacağını kontrol edememekten rahatsız
olan web developerların çok seveceği bir özelliktir. Ancak
webcomponentilerinin getirdiği bazı kolaylılardan şimdilik mahrum
kalınması da bir dezavantaj olarak gözükebilmektedir. MVC Framework
için helper methodları ve web control kütüphaneleri geliştirilmeye
devam etmektedir bunların sayısı ve yetenekleri artıktıkça tüm html
çıktısını kendisi yönetmek istemeyen ve web kütüphanelerin sağladığı
kolaylıkları kullanmaya devam etmek isteyen yazılım geliştiriciler de
MVC Framework'e daha sıkcak bakmaya başlayacaktır.
- MVC
framework test edilebilirlik sunmaktadır. WebForms uygulamaları da test
edilebilirdi ancak unit testing ile değil uygulama deploy edildikten
sonra kaydedilen scriptleri tekrar run ederek ve http requestlerini
kaydedip tekrar etme mantığı ile çalışan test yöntemleri ile test
edilebiliyordu. MVC Framework yapısı itibariyle controller sınıflarında
yazılan her sayfa aksiyonun test edilebilir olmasını sağlamaktadır.
- MVC
Framework tasarımı itibariyle pluggable bir yapıdadır, dependency
injection framework kütüphaneleri ile birlikte çalışılabilmektedir.
- URL
routing sistemi üzerine kurulu olan MVC Framework ile arama motorları
ile uyumlu bir yapıdadır. URL routing ile tanımlanan adresler yapısına
bir örnek vermek gerekir ise /kullanici/goster/1 şeklinde bir adres
tanımlanabilir. Bu şekilde tanımlanan bir adrese istek yapıldığında
kullanicicontroller sınıfında ki goster method çağrılır parametre
olarak 1 değeri geçilir. kullanicicontroller sınıfında ki duzenle
methodunu çağırmak için kullanici/duzenle/1 adresi kullanılmaktadır. Bu
örneklerden anlaşıldığı gibi gelen bir http isteği webforms mimarsinden
farklı olarak html markup içeren .aspx dosyasına değil doğrudan c#
sınıfı olan controller sınıflarına gider, controller sınıfı ise bir
aspx sayfası mı oluşturağına ya da bir nesneyi xml, json gibi mi
döneceğine karar vererek view katmanını aktive eder.
Model - View - Controller kavramları

*msdn.microsoft.com
Model katmanı
veriyi ve bu veriyi işlemek iş mantığı çalıştıran katmandır. Daha
pratik olarak örneklendirmek gerekir ise sisteminizde ki kullanıcı
entitynizi temsil eden sınıfdır, kullanıcı bilgilerine erişmek,
kullanıcı kaydetmek, kullanıcıyı kaydederken işlettiğiniz iş
kuralı/mantığının yer aldığı sınıflardır.
Controller katmanı
http requestleri ile gelen isteklerin eşleştirildiği action
methodlarının yer aldığı katmandır. Gelen bir http isteği routing
tablosuna bağlı olarak doğrudan controller sınıflarına ve o sınıflarda
ki action methodlarına aktarılır. Controller sınıfı içinde yer alan
action method içerisinde Model katmanı da kullanılarak yapılması
gereken işler (bir veriye erişmek,güncellemek vs. gibi) yapılır ve
view'ın nasıl döneceğine göre bir geri dönüş türü ile view katmanı
aktive edilir.
View katmanı kullanıcı arayüzünün
oluşturulduğu katmandır. Model her zaman bir .aspx dosyası olmak
zorunda değildir tanımlanmış başka bir viewengine ile view katmanı
oluşturulabilir. ASP.NET MVC Framework ile gelen .aspx dosyaları ile
çalışan standart view engin yanında internet üzerinden genellikle open
source olan bazı view engine kütüphanelerine erişebilirsiniz. Bu
viewengine değiştirilebilme durumu da MVC Framework'ün pluggable olan
tasarımı sayesinde olmaktadır. Örnek bir kaç viewengine kütüphanesinden
bahsetmek gerekir ise; Nahml (
link1, link2), Spark(
link1,
link2), Brail (
link1,
link2), String Template (
link1,
link2).
Bundan sonra ne olacak? WebForms mu? MVC Framework mü? Hangisini seçmeliyim?
ASP.NET
MVC Framework, WebForms yerine gelmiş bir teknoloji değildir.
Projenizin gerekliliklerini de göz önünde bulundurarak hangisini
seçeceğinize karar verirsiniz.
MVC Framework seçmenin avantajlar
- Model, view, controller gibi katmanların ayrılması ile iş mantığı kodlarının yönetilmesi daha kolaylaşmıştır.
- Web sitenizde yer alan farklı bölümlerin farklı yazılımcılar tarafından geliştirilmesini bir adım daha kolaylaştırmıştır.
- Test driven development desteği vardır, TDD yapılacak ise mutlaka
MVC kullanılmalıdır. Zira controllerlar webforms da olduğu gibi view
etkileşimi (btnSave.Click gibi) ile çalışmamaktadır.
- ViewState ve sunucu taraflı web componenetleri çalışmadığı için
istemciye giden HTML markup çıktısı üzerinde tam kontrolünüz vardır.
- Bir internet sitesi geliştiriyorsanız REST (Representational
State Transfer) url yapısı ile çalıştığı için arama motorlarının
indexlemesi ve tekrar bulabilmesi için avantaj sağlar. show.aspx?id=1
gibi bir adres yerine makale/asp.net/aspnet_ile_mvc_uygulamalari gibi
bir adres arama motorları tarafından içeriğine göre daha tercih
edilirdir. Bu sayede arama sonuçlarında yukarılarda çıkabilirsiniz.
- İstemciye giden html çıktısı daha küçüktür çünkü hidden inputlar
içinde, viewstate gibi veriler istemciye aktarılmaz ve tabiki geriye de
post edilmez. Herkese açık ve yoğun kullanıcı trafiği olan sitelerde
ölçülebilir bir performans kazandıracaktır.
- jQuery vb. javascript kütüphaneleri ile daha kolay
çalışabilirsiniz. Zira Html çıktısında oluşturulan elementlerin id
değerleri tamamen sizin kontrolünüzdedir. WebForms'da her web
componentinin istemci tarafında ki id si ClientID sunucu taraflı
propertysi ile alınıp javascript kodlarının arasına basılması
gerekiyordu.
WebForms seçmenin avantajları
- Bir windows uygulamasında olduğu gibi olay tabanlı programlama desteği sunmaktadır. (button.click gibi)
- İlk günlerinden itibaren gelişmiş ve büyümüş (gerek Microsoft
tarafından sağlanan, gerek üçüncü parti -telerik,devexpress- vb) bir
web component desteği mevcuttur. Çok güçlü yeteneklere sahip datagrid
gibi listeme kontrollerine sahiptir. Bugüne kadar ASP.NET ile
geliştirme yapmış yazılım geliştiriciler ise benzeri web
componentlarını kullanmaya aşinadır.
- RAD ortamlarından uygulama geliştirmiş tüm yazılım geliştiricinin
aşina olduğu bir yapıda çalışmaktadır. Örneğin hiç web development
yapmamış bir yazılım geliştiricinin adapte olması daha kolaydır.
- Sayfa bazında durum yönetimi kolaydır, viewstate kullanır.
Uygulama geliştirirken unit test yapacağım, kullanıcıya giden çıktının
kontrolüne sahip olmalıyım diyorsanız MVC Framework seçebilirsiniz.
Daha hızlı biçimde RAD toolları kullanarak, veri yoğunluklu ve windows
forms da ki olay tabanlı yaklaşım ile uygulama geliştireceğim
diyorsanız WebForms seçebilirsiniz.
Bu makalemizde MVC Framework'ü temel olarak anlamaya ve kafamızda
pozisyonlandırılmasına çalıştık. Çıkış amacını anlamaya ve WebForms ile
karşılaştırarak her birinin avantajlarını görmeye çalıştık.
ASP.NET MVC Framework ile ilgili makalelerim devam edecek.