Asp.Net MVC nedir, ne değildir yazısı olmayacak bu baştan söylemekte fayda var sanırım. Asp.Net MVC Framework’ün arka tarafında olan bir kaç işlemi anlamaya çalışacağız. Öncelikle Asp.Net MVC Framework, IHttpHandler arayüzünden türeyen MVCHandler ve çevresinde dönen, Asp.Net Framework’ü kullanılarak geliştirilen ayrı bir framework. Aslında Amerika’nın yeniden keşfedilmesini sağlayan bir kavram(!) ya da Mars’a roket göndermemize yardım eden bir teknoloji değil.
Asp.Net’deki IHttpHandler arayüzü, web ortamında, gelen “request”leri,yada içerikleri(context) kontrol etmemizi ve “response”ları yaratmamızı sağlayan bir arayüz. Eminim bir çoğumuz kendi “Handler”larımızı bazen yazma gereği duymuşuzdur. Asp.Net MVC Framework de belli amaçlara ulaşmak için Microsoft’un kendi “Handler”larını yazması ile ortaya çıkıyor işte. Kaynak kodlarına baktığımız zaman zaten bunu daha iyi anlayabiliyoruz.
Şimdi Asp.Net MVC Framework, gelen bir HTTP request’ini alıyor, kendi yorumlayabileceği yapıya dönüştürüp(ki burası da Routing mekanizması oluyor aslında), kendi içinde işliyor. Bu noktada da karşımıza “Controller” kavramı çıkıyor. Kendi içinde işlediği nokta bu “Controller” kısmı oluyor. Daha sonra da bu “Controller” kavramı “View”leri oluşturuyor. Hatırlarsanız az önce IHttpHandler’ın “response”ları yaratmamıza yardım ettiğini söylemiştim. Buna şimdi ek olarak da, IHttpHandler’ın daha doğrusu, bu arayüzden türeyen MVCHandler’ın “Controller”ların yaratılmasını sağladığını söylemek istiyorum. Yaratılmasını sağlıyor dedim dikkat ederseniz. Yani direk kendi yaratmıyor. Bu nokta çok önemli.
Asp.Net MVC Framework’de “Controller”ların yaratılmasını “DefaultControllerFactory” sağlıyor. Evet, tahmin ettiğiniz gibi bir tasarım kalıbı…DefaultControllerFactory, CreateController() metodu ile request sonucu oluşan içeriği(context) alır ve ilgili “Controller” sınıfını oluşturur. Asp.Net MVC Framework’de bu DefaultControllerFactory’nin oluşmasını, ControllerBuilder objesi sağlar.
Şimdi yavaş yavaş biraz daha eğlenceli yerlere geliyoruz aslında. Asp.Net MVC Framework, bize bu “Controller” yapısına gerektiğinde müdahale etmemiz için çeşitli metodlar ve arayüzler sunuyor. DefaultControllerFactory’nin de türediği IControllerFactory arayüzü bunlardan biri. Bu arayüzden kendi ControllerFactory’lerimizi yaratabiliriz. Dolayısıyla kendi “Controller”larımızı yaratabiliriz. Bu sayede “Controller”larda ortak operasyonları gerçekleştirebiliriz. Yukarıda bahsettiğim CreateController() metodu da bu arayüzden geliyor. Bu metod RequestContext tipinde bir değer alıyor. Bu sunucuya yaptığımız “request”in anlamlı hale geldiği objemiz oluyor. Bir diğer parametre de adından da anlaşıldığı üzere “Controller”ın ismi…
İlerleyen yazılarda kendi kontrol fabrikamısı(:)) yaratıyor olacağız ve bütün bu laf kalabalığını biraz daha anlamlı hale getireceğiz.
Umarım kafalar fazla karışmamıştır. Bu kavramları bilmek gerekli mi diye sorabilirsiniz, ya da gerekli olmadığını savunabilirsiniz…Ama küçük bir proje için derinlere dalıp, biraz debelenmem gerekti. Sonuçlarını da paylaşma gereği hissettim. Önümüzdeki yazılarda bu kavramları kod örnekleri ile daha da anlamlı kılıyor olacağım. Şimdilik bu kadar…