evcil.net noktanın egemenliği

1612 / 070

Bir ASP.NET MVC Deneyi

Hafta sonu sıkıldık diyelim. İşte güzel bir vakit geçirme teklifi. Bakalım ASP.NET MVC pişmiş mi bir tadına bakalım.

Teknoloji bıraktığımız yerde değil, mütemadiyen tekâmül ediyor. ASP.NET çıkınca çok ilgi göstermiştik. Şimdi bakıyoruz geriye, kaç sene oldu. Meraklısına yeni ortamlar lâzım. Sağolsun Microsoft'un ürünlerindeki bir sonraya bırakılmış çözümler bu beklentiyi her zaman sıcak tutuyor. ASP.NET için de öyle oldu denilebilir. Gelinen noktada, klasik ASP.NET ile geliştirmenin çoğu durumda isteneni karşılamadığı, mimâri olarak geliştiricinin önünü tıkadığı yüksek sesle konuşulur oldu. Bu sesler Microsoft tarafından da dinleniyordu muhakkak ve onlar da MVC yaklaşımını ASP.NET sisteminin içine gömdüler. Daha doğrusu gömecekler de prova yapıyorlar.

Bu yazımızda, çay-kahve-çorbamızı alıp şu yeni MVC ne menem bir şeymiş, ona eğileceğiz. Umarız, zevkli bir teknik yazı olur ve biz de memnuniyetle yayımlarız. Vira bismillah!

Girizgâh

MVC Nedir?

MVC sâir kereler yazıldığı gibi Model-View-Controller ifadesinin kısaltması olup daha çok web uygulamaları geliştirmede rehberlik edecek mimari bir kalıptır. Bir çok fikir gibi önce Java âleminde popüler olup sonra da .NET âlemine sıçrayanlardan birisi. Tekrara düşmemek için size birkaç link savurup MVC'ye giriş kısmını geçelim:

  • Wikipedia'da MVC maddesi
  • Vikipedi'de MVC maddesi
  • Taner'in okulumuzun bahar etkinlikleri için hazırladığı MVC sunumu.

ASP.NET MVC Nedir?

Bu konuda da üç aydır oluşan bir bilgi birikimi mevcut. Hâzır olanı kullanmak programlamadaki temel prensiplerimizden biriyken, neden bunu yazı yazarken kullanmayalım. Hadi size birkaç link daha:

Deney İçin Hazırlık

İşlem tamam demektir. VWD 2008'i açıp "New Site" dediğinizde aşağıdaki manzara var ise oturup üzerinden konuşabiliriz demektir :

Visual Web Developer 2008 Express

Projeyi Oluşturmak

VWD'den yeni bir "ASP.NET 3.5 Extensions Web Site" açmamız lâzım. İlk açılışında pek bir malzeme olmuyor projede. Default.aspx ve web.config var; az ve öz. Biz default.aspx'i biraz değiştireceğiz. Öncelikle C# kod sayfasını (default.aspx.cs) silelim. Sonra da default.aspx'in içini boşaltalım. Boş olunca VWD kızıp durabilir, hiç olmazsa bir HTML comment ekleyebiliriz:

defaultaspx

Global.asax

Global kodlar yazdığımız bu sayfa hâlâ önem arzediyor. Projeye global.asax ekleyip içine garip şeyler yazacağız:

Global.asax Code

System.Web.Mvc yeni "namespace"imiz olarak ışıl ışıl yanıyor gördüğünüz gibi. Ondan sonra RouteTable diye bir şeye yeni "Route"lar eklediğimiz dikkatinizi çekecek. Kodun maksadı, [controller]/[action]/[id] formatında gelen URL'lerdeki bilgilerin nasıl ayrıştırılıp kullanılacağını belirlemek. Route ifadesi de, bu bilginin ayrıştırılıp HTTP isteğinin uygun Controller sınıfının Action nitelikli metoduna yönlendirilmesi işi söz konusu olduğu için kullanılmış. Bir başka deyişle URL'den metoda yönlendirme kuralları tanımlanıyor burada.

Sözdizim C# 3.0'a bulaşmayanlara yabancı gelecektir. Nesne hazırlayıcılar ve anonim tipler denen yeni özellikler kullanılmış.

URL yönlendirmelerini tanımlamakla ilgili Scott Bey'in URL Routing başlıklı makalesi doyurucu bir kaynak. Yine detaylardan kaçtık gördüğünüz gibi.

Controller

Projemize App_Code klasörü ekleyelim. Bu ASP.NET 2.0'den beri kullandığımız özel bir klasör adı. Bu klasör içerisindeki kod dosyaları dinamik olarak ilk istekle derleniyor.

App_Code altına HomeController adıyla bir C# sınıfı da ekleyelim. Henüz içine bir şey yazmadık, projenin vaziyeti şu:

Controller

HomeController, bizim ilk kontrolörümüz. Şimdi ona bezeyeceğimiz kod bakınız:

HomeController

Dikkat edeceğimiz noktalar:

  • Kontrolörümüz System.Web.Mvc.Controller isimli bir özel sınıftan türüyor.
  • "Index" ve "About" isimli metodlarımıza yine aynı "namespace"e mensup ControllerAction niteliğini vermişiz.
  • Metodlarımız RenderView diye gizemli bir metodu çağırıyor. Ancak ikisinde de parametreler değişiyor.

Bakalım neler olacak? Devam ediyoruz.

View

View kısmı için projeye "Views" ve içine "Home" klasörü eklemeliyiz. İllâ adları "Views" veya "Home" olmak zorunda değil ama MVC'miz öntanımlı olarak bu formatı kullanıyor. Kontrolör ismiyle "View"lar bu şekilde eşleşiyor. Bir sonraki sürümde bu ilişki yapısı özelleşebilecek.

"Home" klasörü içerisine iki adet aspx ekleyelim: "index.aspx" ve "about.aspx". Bu deneysel sitemizin iki "view"i olacak anlamına geliyor. Aspx'leri eklerken bu seferlik tek dosya olarak ekleyelim. Yani kodu ayrı bir C# sınıfında bulunmasın.

Proje ağacımız şöyle oldu:

Views

Şimdi "index.aspx"in biraz kimyasını bozacağız:

Index View Code

Onu altı çizgili sınıftan (ViewPage) türeyen bir sayfa yaptık. Bu, index.aspx'in bir "View" olabilmesi için gerekli. Sayfamızda başka da özel bir şey yok. Her şey sıradan.

About.aspx'te de benzer bir değişiklik yapalım:

About View

Run MVC, Run!

Şimdi gelelim heyecanlı kısma: bu sayfaları çalıştırmak. "F5"ten önce, projenin başlangıç özelliklerinden "şu sayfayı çalıştır" tercihini aktifleştirip karşısındaki değeri de boş bırakmanızı tavsiye ederim. Böylelikle proje başladığında uygulamanın kök dizininden başlayacaktır:

First Run

Bu devirde IE 6 kullanan kaldı mı diyor olabilirsiniz. Var efendim demek ki.

Kök dizinimizdeki "default.aspx"i hatırlarsanız içinde hiçbir malzeme yoktu. Nasıl oldu da bizim ta nerelerdeki "index.aspx"imiz "render" oldu? Cevap MVC'de efendim. Global.asax'a yazdığımız şu "Route"u hatırladınız mı?

RouteTable.Routes.Add(new Route
{
    Url = "Default.aspx",
    Defaults = new { controller = "Home", action = "Index", id = (string)null },
    RouteHandler = typeof(MvcRouteHandler)
});

Açık açık "default.aspx" diye gelecek bir URL'yi "Home" kontrolörümüzün "Index" metoduna gönder diyoruz.

Ya URL'i /home/index yaparak denersek:

Controller Run

Hemen tahmin edeceğiniz gibi bu URL alternatifinde global.asax'a yazdığımız ilk "Route" tanımı devreye girdi. Neydi o?

RouteTable.Routes.Add(new Route
{
    Url = "[controller]/[action]/[id]",
    Defaults = new { action = "Index", id = (string)null },
    RouteHandler = typeof(MvcRouteHandler)
});

/home/about URL'i de tanıdık bir netice veriyor:

About - Run

Bozmak da kolay:

Hata

Ana sayfamızda bir eksik gözünüze çarpmıştır. Hakkında sayfasına bağlantı yok. Onu maksatlı olarak sona bıraktık. Klasik olarak linki şu şekilde verelibiriz:

Klasik Link Kodu

Ama bunun yerine daha yapısal bir metod kullanalım. "ViewPage" temel sınıfı bize "HtmlHelper" türünde bir yardımcı nesne sağlıyor:

Action Link - Kod

Netice:

Action Link

Toparlayalım

Pazar günümüzü bu MVC deneyiyle geçirdik. Faydası ne oldu?

ASP.NET'in kasvetli havasının biraz dışına çıkıp tertemiz XHTML çıktılarına doğru yelken açacağımız bir mimariye giriş yaptık. Model-View-Controller üçlemesinden sadece Model'i kullanmadık ama sabredelim, bir gün o da olur.

Bilinmesi gereken bir şey var ki ASP.NET MVC hâlen geliştiriliyor. Eklenecek bir sürü özellik var. Bunlar tamamlandığında konforlu bir MVC ortamı olacağı kesin. Bir ASP.NET projesine başlayacak kişiler için de önlerine ikinci ve güçlü bir yol olarak dikilecek.

MVC ile.

 

Yazan: Muhammed C. Tahiroğlu

No description. Please complete your profile.
Filed under: ASP.NET Leave a comment
Comments (0) Trackbacks (0)

No comments yet.


Leave a comment


No trackbacks yet.

Sayfalar

Kısımlar

Desteklediklerimiz

Ay bazında arşiv

Haberleşme