2002 yılında ortaya çıkan ASP.NET (Henüz platform değil.), Web Formları olarak da anılır. Temel amacı web uygulama geliştirme sürecini olabildiğince masaüstü uygulama geliştirme süreçlerine benzetmektir. Bunu yaparken HTML ve HTTP detaylarından sizi soyutlama yoluna gider. Bunuda sunucu taraflı kontrollerle yapmaktadır.
web sayfaları sunucu üzerinden gidip gelirken her bir sunucu taraflı kontrol nesnesinin (asp.net kontrolleri) durumu viewstate denilen bir teknik/mekanizma kullanılarak saklanır. ASP.NET sayfalarında viewstate bilgisini tutmak için id değeri __VIEWSTATE olan gizli bir input nesnesi oluşturulur ve value değerine de sayfada kullanılan asp.net kontrollerinin durumu Base64 kodlaması ile şifrelenerek atanır.

Yukarıda value özeliğine atanan string/text ifadesinin sayfaya verdiği ağırlık (yerçekimi burada da var.), asp.net kontrollerinin sayfa üzerindeki miktarı ve işlevine göre büyüme eğilimindedir. Buda hız ve bant genişliğinin her zaman önem arz ettiği web dünyasında bir problem olarak karşımıza çıkmaktadır.
ASP.NET, code-behind denilen mekanizma ile HTTP ile .NET kodunu birbirinden ayırmakta olduğunu söylese de pratikte; uygulama iş katmanı (application business layer) sonuçlarına göre HTML çıktı üretme işi kod kısmında karmaşık kodlamaya yol açabilmektedir .
Sunucu taraflı kontrollerin ürettiği HTML çıktıları üzerinde de kontrolümüz kısıtlıdır. Buda sayfa üzerindeki ihtiyaç duyulanın çok ötesinde bir HTML ile karşıkarşıya kalmamıza sebeb olur. Özellikle nesnelerin ID lerinin üretimindeki karmaşıklık ve javascript içinde kullanımı zordur. Bu durum sonraki sürümlerde daha derli toplu bir hale getirildi.
ASP.NET için yazılım projelerinin önemli bir özelliği olan test edilebilirlik, teste uygun kod yazımı kavramında da sıkıntılar vardır. Unit Testing için uygun olmayıp, entegrasyon testleri içinde sıkıntılı süreçler söz konusudur.
Gelişim sürecinde karşılaşılan bu problemler ve zaman içinde web standartlarının sürekli gelişimi,
mobil cihazlarla uyumluluk, farklı tarayıcılarla çalışabilme seçenekleri, HTML5'in çıkışı , standartlara uygun geliştirilmiş javascript kütüphaneleri (AngularJS, jQuery, jQuery UI, and jQuery Mobile), Sadece HTML ile değil, bunun yanında JSON , XML, AJAX ile de çalışmak, RESTFull
mimarisini desteklemek, birde AGILE ve Test-Driven, Behaviour-driven metodolojileri, tüm bu standartların sonucu oluşan otomasyon araçları ve bunlara uyumluluk derken ASP.NET Web formları da teknoloji dünyasında var olabilmek için gelişecek ve değişecekti.
2004 yılında Ruby on Rails sahneye çıktı ve ünlüde oldu. Açık kaynak kodlu bu web uygulama geliştirme altyapısı MVC yaklaşımını temel almaktadır (MVC bir tasarım kalıbı olup ASP.NET 'e özgü değildir. Microsoft şirketinin henüz yeni kurulmuş olduğu dönemlerde bu tasarım kalıbı vardı), ORM desteği sağlar (.Net için Entity Framework gibi), yukaridaki paragrafta bahsi geçen Agile, TDD, BDD yaklaşımları ile uyumlu çalışır.
AJAX bize javascript'in önemini gösterdi. JQuery ile kolaylığını ve gücünü gördük. Google'in açık kaynak kodlu V8 javascript motoru ise hızını ve sunucu taraflı kodlamada da kullanılabileceğini gösterdi (Geliştiriciler tek bir dil -javascript- kullanarak hem istemci hemde sunucu taraflı kodlama yapabilmekteler. ). 2009 yılında ortaya çıkan Node.js bunun güzel bir örneğidir. ASP.NET MVC' in asenkron kontrollerinde kullanılmaktadır.
2007 yılında Microsoft yeni web geliştirme platformunu duyurdu. ASP.NET artık platform olmuştu. Web form mimarisine getirilen eleştirilere cevap verecek şekilde, Ruby on Rails' den ve benzeri platformlardan elde edilen geliştirme ve kullanım tecrübeleri ile, ASP.NET MVC altyapısı ile ortaya çıktı. ASP.NET MVC altyapısı MVC tasarım kalıbını kullanır. MVC tasarım kalıbının ortaya çıkışı 1978 yılına kadar uzanır.
MVC (Model-View-Controller) kullanımı ile web uygulamasında ortaya çıkan kullanıcı etkileşimi aşağıdaki gibidir;
Kulllanıcı bir eylemde bulunur(Action, c# bu eylemi bir metodla temsil eder. Metodlarda bildiginiz üzere bir sınıf içinde olur. İşte bu sınıfa Controller denir.). Bu eyleme karşılık gelen OOP yaklaşımı ile modellenmiş bir bilgi var ise (Model) kullanıcıya bir HTML arayüzü (View) ile sunulur.
ASP.NET MVC;
ASP.NET platformu içinde MVC altyapısı da olacak şekilde aşağıdaki şekilde sunulmuştur.
MVC altyapısı ile çalışırken konfigurasyon, güvenlik, ön bellekleme servislerinden yararlanırsınız. Bunlarda ASP.NET platformunun bir parçasıdır. Yani bu servisleri bir tek ASP.NET MVC altyapısı kullanmaz. Tüm ASP.NET teknoloji ailesi bunları kullanır.
ASP.NET MVC ile bu servislerin etkileşimi aşağıdaki şekilde gösterilmiştir.
Buraya kadar ASP.NET in bir platform olarak gelişim sürecine yer verdik. Bu süreç içinde MVC ' nin bir framework olarak ortaya çıkmasının nedenlerinden bahsettik. Bu aşamadan sonra MVC tasarım kalıbı üzerine biraz daha eğilecek ve konuyu örneklerle açıklamaya çalışacagım. Boylelikle yazılım dünyamızda
neden yeri olmalı, ihtiyac nedir daha iyi anlayabileceğiz.
web sayfaları sunucu üzerinden gidip gelirken her bir sunucu taraflı kontrol nesnesinin (asp.net kontrolleri) durumu viewstate denilen bir teknik/mekanizma kullanılarak saklanır. ASP.NET sayfalarında viewstate bilgisini tutmak için id değeri __VIEWSTATE olan gizli bir input nesnesi oluşturulur ve value değerine de sayfada kullanılan asp.net kontrollerinin durumu Base64 kodlaması ile şifrelenerek atanır.

Yukarıda value özeliğine atanan string/text ifadesinin sayfaya verdiği ağırlık (yerçekimi burada da var.), asp.net kontrollerinin sayfa üzerindeki miktarı ve işlevine göre büyüme eğilimindedir. Buda hız ve bant genişliğinin her zaman önem arz ettiği web dünyasında bir problem olarak karşımıza çıkmaktadır.
ASP.NET, code-behind denilen mekanizma ile HTTP ile .NET kodunu birbirinden ayırmakta olduğunu söylese de pratikte; uygulama iş katmanı (application business layer) sonuçlarına göre HTML çıktı üretme işi kod kısmında karmaşık kodlamaya yol açabilmektedir .
Sunucu taraflı kontrollerin ürettiği HTML çıktıları üzerinde de kontrolümüz kısıtlıdır. Buda sayfa üzerindeki ihtiyaç duyulanın çok ötesinde bir HTML ile karşıkarşıya kalmamıza sebeb olur. Özellikle nesnelerin ID lerinin üretimindeki karmaşıklık ve javascript içinde kullanımı zordur. Bu durum sonraki sürümlerde daha derli toplu bir hale getirildi.
ASP.NET için yazılım projelerinin önemli bir özelliği olan test edilebilirlik, teste uygun kod yazımı kavramında da sıkıntılar vardır. Unit Testing için uygun olmayıp, entegrasyon testleri içinde sıkıntılı süreçler söz konusudur.
Gelişim sürecinde karşılaşılan bu problemler ve zaman içinde web standartlarının sürekli gelişimi,
mobil cihazlarla uyumluluk, farklı tarayıcılarla çalışabilme seçenekleri, HTML5'in çıkışı , standartlara uygun geliştirilmiş javascript kütüphaneleri (AngularJS, jQuery, jQuery UI, and jQuery Mobile), Sadece HTML ile değil, bunun yanında JSON , XML, AJAX ile de çalışmak, RESTFull
mimarisini desteklemek, birde AGILE ve Test-Driven, Behaviour-driven metodolojileri, tüm bu standartların sonucu oluşan otomasyon araçları ve bunlara uyumluluk derken ASP.NET Web formları da teknoloji dünyasında var olabilmek için gelişecek ve değişecekti.
2004 yılında Ruby on Rails sahneye çıktı ve ünlüde oldu. Açık kaynak kodlu bu web uygulama geliştirme altyapısı MVC yaklaşımını temel almaktadır (MVC bir tasarım kalıbı olup ASP.NET 'e özgü değildir. Microsoft şirketinin henüz yeni kurulmuş olduğu dönemlerde bu tasarım kalıbı vardı), ORM desteği sağlar (.Net için Entity Framework gibi), yukaridaki paragrafta bahsi geçen Agile, TDD, BDD yaklaşımları ile uyumlu çalışır.
AJAX bize javascript'in önemini gösterdi. JQuery ile kolaylığını ve gücünü gördük. Google'in açık kaynak kodlu V8 javascript motoru ise hızını ve sunucu taraflı kodlamada da kullanılabileceğini gösterdi (Geliştiriciler tek bir dil -javascript- kullanarak hem istemci hemde sunucu taraflı kodlama yapabilmekteler. ). 2009 yılında ortaya çıkan Node.js bunun güzel bir örneğidir. ASP.NET MVC' in asenkron kontrollerinde kullanılmaktadır.
2007 yılında Microsoft yeni web geliştirme platformunu duyurdu. ASP.NET artık platform olmuştu. Web form mimarisine getirilen eleştirilere cevap verecek şekilde, Ruby on Rails' den ve benzeri platformlardan elde edilen geliştirme ve kullanım tecrübeleri ile, ASP.NET MVC altyapısı ile ortaya çıktı. ASP.NET MVC altyapısı MVC tasarım kalıbını kullanır. MVC tasarım kalıbının ortaya çıkışı 1978 yılına kadar uzanır.
MVC (Model-View-Controller) kullanımı ile web uygulamasında ortaya çıkan kullanıcı etkileşimi aşağıdaki gibidir;
Kulllanıcı bir eylemde bulunur(Action, c# bu eylemi bir metodla temsil eder. Metodlarda bildiginiz üzere bir sınıf içinde olur. İşte bu sınıfa Controller denir.). Bu eyleme karşılık gelen OOP yaklaşımı ile modellenmiş bir bilgi var ise (Model) kullanıcıya bir HTML arayüzü (View) ile sunulur.
ASP.NET MVC;
- Ticari yazılım geliştirirken uygulanan katmanlı mimari ile MVC arasında doğal bir uyum vardır.
- Sunduğu bileşenlerin var olan hallerini kullandığınız gibi, ihtiyaç durumunda var olan davranışları değiştiren kendi sınıflarınızı yazmanıza olanak verir.
- HTML ve HTTP üzerine geniş kontrol imkanı sunar. Html çıktısınız siz üretirsiniz. Basit ve standartlara uyumludur. JQuery,Bootstrap kullanmanızı destekler.(Visual Studio ASP.NET MVC proje şablonlarında varsayılan olarak bulunur.),
- Üretilen sayfalar viewstate içermez.
- Test edilebilir kodlama yapmanıza olanak sağlar.Unit Testing desteği verir. UI test otomasyon araçlarıyla çalışabilmenize imkan sağlar.
- Güçlü ve bir okadar da basit bir URL yönlendirme mekanizması vardır. Temiz ve basit URL üretmenizi sağlar. Üretilen URL fiziksel bir dizine karşılık gelmez.
- Açık kaynak kodludur. (Bakınız.)
ASP.NET platformu içinde MVC altyapısı da olacak şekilde aşağıdaki şekilde sunulmuştur.
MVC altyapısı ile çalışırken konfigurasyon, güvenlik, ön bellekleme servislerinden yararlanırsınız. Bunlarda ASP.NET platformunun bir parçasıdır. Yani bu servisleri bir tek ASP.NET MVC altyapısı kullanmaz. Tüm ASP.NET teknoloji ailesi bunları kullanır.
ASP.NET MVC ile bu servislerin etkileşimi aşağıdaki şekilde gösterilmiştir.
neden yeri olmalı, ihtiyac nedir daha iyi anlayabileceğiz.


