ASP.NET MVC framework'u genisletmek -1
ASPNET MVC Framework'un decoupled(ayrik) yapisi bizim uygulamalari test
etmemizi kolaylastirdigi gibi onu gelistirmemize de olanak veriyor. Buna ornek
olarak WebForms syntaxindan kurtulup daha onceden bildigimiz, alistigimiz
template engine'i kullanabilir veya istedigimiz IoC container'ini controllerlari
cozumlemek icin kullanabiliriz.
Ben bu makalede ikisine de ornek yapacagim. Template engine olarak
monorail'den alisik oldugum nvelocity yi ve IoC olarak da bagimlisi oldugum
Windsor'u kullanacagim.
- ViewFactory yaratmak
ASP.net MVC framework ile sevdigimiz bir template engine'i
kullanabileceigimizi soylemistik. Java'cilarin bildigi Velocity engine gibi
bir seyi frameworkumuzle kullanmanin ne kadar kolay oldugunu ornekle
goreceksiniz. Ben her ne kadar ustunde calistigim projede webforms view
engine kullaniyor olsam da kisisel tercihim nvelocity. Bunun arkasinda yatan
temel neden Webforms'un typesafe olmakta israrli olmasi. Bu nedenle anonim
tipleri kullanmaniza imkan yok reflectionla almak disinda. Ayrica web
sayfasi icinde her seferinde <% ve %> yazmak, makarna kod diye tabir
ediyorlar, hele isin icinde casting islemi de varsa cileli bir hal aliyor.
Ornek verecek olursam:
Webforms'la

yazmak yerine
NVelocity ile

yapabilirsiniz. Bu belki size dinamik dillerden tanidik gelecektir. Cast
etmeye ihtiyac duymadan alt alanlarina erisebiliyoruz. Temelde template
engine'lerin hemen hepsinin yaptigi is benzer. Belirledikleri belirli bir
syntaxi size kullandirarak hazirladiginiz tema/template'i verdiginiz
verilerle dolduruyorlar. Yukaridaki ornekte $post.Title template elemani ve
bizim bu temaya gececegimiz Post nesnesi, template engine tarafindan islenir
ve $post.Title "Merhaba Dunya" ile yer degistirilir.
Gelin simdi bu nasil olacak onu gorelim
Once yeni bir class library acalim ve adini MVCExtensions koyalim

Projemize referans olarak System.Web.Extensions'u ve NVelocity.dll i verelim.
Daha sonra ViewFactories diye bir klasor acip icine NVelocityViewFactory
classini ekleyelim ve bu class'in IViewFactory'yi implemente etmesini
saglayalim. IViewFactory ASP.net MVC Frameworkun belirledigi ViewFactoryler
icin bir kontrat. Bunu implemente eden herhangi bir sinif potansiyel view
factory olarak kullanilabilir.
Bu interface bizden tek bir method istiyor, CreateView. Bu methodu Hamilton
Verossimo asagidaki sekilde duzenlemis, degistirmeden aktariyorum

Tabi burada daha onemli kisim NVelocityView sinifi, onun da kodlarini
asagida veriyorum

Simdi de ornek uygulamamizi yazalim. Ben asp.net mvcnin default uygulamasini
yazmayi uygun buldum, tabi biraz degistirdim. Bunun icin oncelikle
BaseController diye bir sinif olusturup bunun viewFactory'si olarak
NVelocityViewFactory'yi belirttim. Her ne kadar kotu bir pratik olsa da su
anda daha basite indirgemek icin yapiyorum. Daha dogru bir yaklasim
kesinlikle IoC kullanip bunun disaridan enjekte edilmesi veya uzantiya gore
karar verilmesi olabilirdi.

Ve varsayilan olarak gelen HomeController'i demo amaciylabiraz degistirdim.

Aslinda iki action da ayni seyi yapiyor: Anonim tipi view'a veri olarak
geciyor.

Bu da ornek view kodumuz. Anonim tip gondermemize ragmen reflection
kullanmamiza gerek olmadan duck typing yapabildik.
ve kodumuzu calistirdigimiza karsimiza cikan ekran

Artik hangi view engine kullanmak istediginiz kisisel tercihinize kalmis.
|