ASP.NET MVC Nedir?
MVC’nin ne olduğunu, ne olmadığını önceki yazımda kısaca anlattım. MVC mimarisi hakkında konuşulacak teorik bilgi zaten belirli olduğundan kısa tuttum fakat bu yazı ve bu yazıdan itibaren artık Microsoft’un ASP.NET MVC çatısı hakkında konuşacağız işte bu konuda konuşulacak, söylenecek, uygulanacak çok fazla şey var 🙂 Başlayalım.
Geleneksel ASP.NET formlarını kullanıyorsanız ve “neden ASP.NET MVC kullanayım?” diyorsanız okumaya başlayabilirsiniz.
ASP.NET Formlarının Dezavantajları
ViewState : ASP.NET formlarında ViewState güzel ve sempatik işlevleri olmasına karşın kötü bir tarafı var. Çok şişman. Şöyle: Geleneksel ASP.NET sayfalarında form, kullanıcı bilgileri ve durumları tutması ve postback anında kaybolmasını View State ile engelliyorduk. ViewState bu bilgileri base64 formatında şifreleyerek tutuyor. (ViewState kod oluşturma yapısı) Bu durum kullanıcı sayfayı ziyaret ettiğinde ve her bir istekte bulunuşunda onlarca hatta yüzlerce kilobyte’lık verinin oluşturulması ve HTML çıktısı sayfaya eklenmesi anlamına geliyor ve sayfayanın boyutunu artırıyor. Boyutu artan sayfa sunucuya gitmekle kalsa birde sunucudan tekrar bize geri dönüyor. (Postback) Her defasında hem sunucu tarafında ciddi bantgenişliği harcarken, kullanıcı tarafında ise sayfanın açılışı ciddi yavaşlamalara sebep oluyor.
Page Life Cycle (Sayfa Yaşam Döngüsü) : Bu yapı kullanıcı tarafı (client-side) ile server tarafı (server-side) arasında event’lerin ilişkilerini düzenleyen bir mekanizmadır. Request-response dediğimiz yapı yani kullanıcı tarafından gönderilen istek ve sunucu tarafından bu isteğe verilen cevap arasındaki ilişkileri düzenleyen bir yapıdır. Gelin görünki bu yapı oldukça karmaşıktır. Page life cycle’a müdahale edebilme şansımız var fakat bunu yaptığımızda kötü sürprizlerle karşılaşabilme ihtimalimiz oldukça yüksek. Öyle ki bazen ortaya çıkan hataların neden çıktığını bulamayabilirsiniz.
Serseri HTML Çıktıları : Sunucu taraflı (server-side) diller HTML çıktısı verirler bunu bilmeyenimiz yoktur. ASP.NET sayfalarında sunucuda yorumlandıktan sonra HTML çıktısı olarak bize gelir. Fakat burada hakimiyetimiz sınırlıdır yani istediğimiz gibi bir HTML sayfasını çıktı olarak alamayabiliriz, görüntü olarak istediğimiz HTML dosyasını alsak dahi kod temizliği ve W3 standartlarına uygun HTML çıktısı almak oldukça zor bir hal alıyor ve ortaya kendi halinde, bizim belirlediğimiz disiplinden uzak, serseri HTML sayfaları oluşabilir. Özellikle CSS ve javascript işin içine girince hayalkırıklığımız artabiliyor. ASP.NET 4.x sürümü ile bu sorun bir nebze çözülmüş olsada tamamen ortadan kalktığı söylenemez.
Aşırı Code-Behind Bağımlılığı : Katmansal bir mimariyle (N-Tier vb.) web uygulaması geliştireceksiniz diyelim. Sunum ve iş katmanlarını ayırdınız iyi güzelde ASP.NET formları aslında bu yapıya oldukça ters. Sebebi bir çok mantıksal işlemleri yapacak kodları sunum katmanındaki sayfaların code-behind tarafında yazmak zorunda kalmamız. Hani katmansal mimarimiz? Ayrıca bu durum projenin daha sonra güncellemek veya eklentiler yapmak için ele alındığında işleri daha da zorlaştıracaktır çünkü dağınık bir kod yapısı bizi beklemektedir.
ASP.NET MVC Framework ile Tanışalım
Malum MVC 1979 yılından bu yana bilinen bir yazılım mimari deseni ve bir çok programlama dilinde kullanılan bir desen(kalıp). ASP.NET MVC Framework’de Microsoft tarafından geliştirilmiş ve halen geliştirilen ASP.NET ile MVC mimarisini kullanmamıza olanak sağlayan bir MVC çatısıdır.
ASP.NET MVC’de Model-View-Controller yapıları ve görevleri.
Model : Veritabanına erişim, class’lar, ayrıca data access layer yani veritabanı işlemleri için kullanacağımız Ado.Net, Nhibernate veya EntityFramework ile veri işlemleri burada yer alır.
View : Kullanıcının gördüğü ve arayüze dair şeyler buradadır. HTML, CSS, Javascript kodları… View bölümünde iş akışına ait bir şeyler bulunmaz. Ayrıca View bölümü sayesinde uygulamanın arayüzü uygulamanın çekirdek kısmından ayrı tutulduğundan tasarımı ve tasarımın değiştirilmesi açısından bize avantaj sağlar.
Controller : Client (kullanıcı) tarafından yapılan request (istek) controller’lar tarafından yakalanır ve işleme tabi tutulur. Bu bölüm iş akışının gerçekleştiği, arayüzden gelen kullanıcı etkileşimlerinin değerlendirildiği, işlendiği, gerekli metodların çalıştırıldığı, değişkenlerin ve nesnelerin oluşturulduğu, model ile view bölümleri arasında iletişimin sağlandığı yerdir. ASP.NET MVC’de controller dediğimiz nesneler aslında System.Web.Mvc.Controller ‘dan miras almış minik C# class’larıdır.
Şunu unutmayalım: Her View için bir Controller vardır fakat her Controller için View şartı yoktur.
Yukarıdaki şemada ASP.NET MVC mimarisinin nasıl çalıştığını gösteren aşamaları görüyoruz.
Özetle: Client (kullanıcı/ziyaretçi) tarafından başlatılan request (istek), controller tarafında işleme alınıyor ve neler yapılması gerekiyorsa, modelle irtibata geçilmesi gerekiyorsa modele giderek ilgili nesnelere ulaşıyor ve oradaki işlemlerini yaptıktan sonra tekrar controller’a geliniyor ve controller’da varsa son işlemden geçerek View’a gönderiliyor ve bizim reponse dediğimiz sunucu cevabı HTML çıktısı olarak bize geliyor.
ASP.NET MVC uygulamalarmıza bir sonraki yazımdan itibaren başlayacağız. MVC ile yeni tanışacakların özellikle okuması faydalı olacaktır.