ASP.NET 3.5 Ne Vaad Ediyor?
Hâlâ diri duran ASP, 3.0'da "istop etmişti" bilirsiniz. Rotamız ASP+ diye ortaya çıkan sonra da ASP.NET diye nâm salan yeni teknolojiye döndü. Şimdi ASP.NET'in 3.0 sürümünü hissetmeden (var mıydı böyle bir sürüm?) saatlerimiz 3.5'u gösterir olmuş.
Elimizde ne var bir bakalım.
2.0'ın Yeri Sağlamlaştı
ASP.NET 2.0, 1.x'e göre gerekli ve tatmin edici bir güncellemeydi. "Master Page", "Partial Class", Temalar, Profiller, yepyeni kontroller... A'dan Z'ye, System.Web altında ne varsa elden geçmiş ve yenileri eklenmişti.
Şimdi 3.5 koduyla gelen sürüm, 2.0'ın üzerine ilaveler yapıyor. Ama asla 2.0'da bir şey değiştirmiyor. "Core" diye bahsedilen kısım 2.0. Aynen .NET 3.5'un genelinde olduğu gibi.
O nedenle 3.5'tan ASP.NET adına pek bir şey beklemeyin. Bu minör, yani minicik güncelleme. Yepyeni olan ne varsa, ortak framework'te var.
Boncuklar
ASP.NET dairesinde boncuk niyetine üç ekleme var, hepsi bu.
AJAX Artık Ev Sahibi
Daha önce ayrıca indirilen, yani misafir hükmündeki ASP.NET AJAX kütüphanesi artık bünyeye entegre edilmiş. Şimdi web'den indirmeden doğrudan kullanılabiliyor. Günümüz şartlarında web'den indirmenin kaybettirdiği zaman düşünülürse; çok mühim bir yenilik.
ListView
GridView ile DataList arasında bir şey. Daha esnek çizelge biçimli veri göstermeye yarıyor. Scott Bey, bir makalesinde kullanımını örneklemiş.
DataPager
Milletin evelden kendi kastığı sayfalama kontrolüne el atmışlar. Bir web kontrolü hedef alarak çalışan arayüz bileşeni. Ancak beraber çalışacağı kontrolün "IPageableItemContainer" diye bir arayüzün temsilcisi olması gerekiyor. Uzmanların verdiği bilgiye göre bu arayüzü de sadece yeni yazdıkları ListView destekliyor.
Baştacımız LINQ
Lafın dönüp dolaşıp bu dört harfli sözcüğe geleceğini tahmin ettiniz değil mi? Yeni aromalı sakızımız çünkü kendileri.
ASP.NET 3.5 ile doğrudan ilgili olmasa da LINQ, bu sürüm ile kullanabileceğiniz önemli bir teknoloji. Basitçe söylemek gerekirse, ilişkili veriyle çalışmak için geliştirilmiş yeni bir yazım dili ve yorumlayıcısı. Bir veritabanı, XML belgesi, iş nesnesi veya LDAP üzerinde LINQ deyimleri ile işlem yapabileceğiz. Bu yeni sözdizimi, .NET dillerine yeni kazandırılan "Lambda Expression", "Extension Method" gibi özelliklerle mümkün oluyor. Şunun gibi görünüyor:
List<string> ilceAdlari = from ilce in ilceler
where ilce.ilKodu = 46
select ilce.ilceAdi;
Ve IDE...
Visual Studio 2008 de bir tutam yenilikle göz kırpıyor bize. ASP.NET'i ilgilendirenlerine bakalım kısaca.
Hedef Zenginliği
Yeni IDE ile eski sürümleri (2.0, 1.x*) hedef alan web siteleri yazabilirsiniz. Yazış serbest! Yani son model arabanızı korkmadan stabilize yollara sürebilirsiniz.
HTML'yi Canlı Görme Devrimi
Scott Bey bunu DevConnections 2007'de ballandıra ballandıra anlatmış ve dinleyicilerden de tebessüm dolu bir alkış almış diyorlar. Yenilik diye sunulan şeyi muhtemelen siz de burun bükerek kullanacak veya hiç kullanmayacaksınız.
Siz de Debug'ların Efendisi Olabilirsiniz
Visual Studio bu sürümde sırf Debug için çalışmış diyebiliriz. JavaScript, CSS ve milli meselemiz AJAX'a yönelik gelişmiş editör ve debug desteğinden bahsediliyor. JavaScript için IntelliSense desteği de kopartılmış. Yorumlarınız bile gözüküyor balonda, ipucu olaraktan.
Netice
ASP.NET 3.5, 2.0'ın kasvetli havasını devam ettiriyor. PostBack, ViewState yerli yerinde. Anlamsız kodlar basan web kontrolleri de duruyor. Benim için 3.5 sönük bir sürüm. Ama taliplisi için çok şey ifade ediyordur.
Kendi adıma asıl değişimin ASP.NET MVC Framework'ün yayımlanmasıyla başlayacağını düşünüyorum. İşte o zaman şu yakamızı 2008'de bile bırakmayan "VB Formları" sendromundan kurtarabileceğiz demektir. Ümidim var.
*: Hüseyin Bey'in hatırlatmasıyla düzeltilmiştir. VS 2008 1.x sürümlerini desteklemiyor.
ORM’de Su Bulanık
Evet, anladık: kimse artık hart hurt SQL yazmak istemiyor. Zaten sunucu tarafında karmaşık SP yazma devrini de çoktan bitirmiştik. Vaktidir o zaman yeni moda işlere girişmenin. Değil mi dostlar?
Camiadaki yeni temayül, kod üreteçler kullanmak ve ORM kütüphaneleri ile ilişkisel verileri konforlu biçimde, SQL'e bulaşmadan manipule etmek. Bu eğilim Java camiasından bizim camiaya naklolmuştur, kabul.
Yalnız bu temayül artık doruk noktasına ulaştığından olsa gerek, ortalık ORM'den geçilmiyor. Şu listeye bir bakınız:
- .NET Persistence
- BBADataObjects
- DataObjects.NET
- Data Tier Modeler for .NET
- DotNorm
- Eldorado.NET
- Enterprise Core Objects (ECO™)
- Entity Broker
- eXpress Persistent Objects for .NET
- FastObjects.NET
- JC Persistent Framework
- LLBLGen Pro
- ModelWorks
- Nhibernate
- Nolics.NET
- Norm
- Norpheme
- ObjectBroker
- ObjectSpaces
- ObjectSpark
- Objectz.NET
- OJB.NET
- OPF.Net (Object Persistent Framework)
- ORM.NET
- Pragmatier Data Tier Builder
- RapTier
- Sisyphus Persistence Framework
- TierDeveloper
- Bob.NET
- ObjectPersistor.NET
- Genome
En eskileri belki Nhibernate ama bu kalabalık, insanın üzerinde "akşam üstü İstanbul trafiği" etkisi oluşturuyor ve iyiyi-kötüyü ayırt ettirmez oluyor.
Bu kalabalık ürün listesi arasında ticari olanlar da var ama genel itibariyle açık kodlu. Açık Kod rüzgarının .NET camiasında artık esip gürlediğinin bir delili bu liste.
Ya MS cephesi?
Microsoft'un elinin armut toplamadığını tahmin edebildiniz: o da ADO.NET Entity Framework ve yepyeni bir sorgulama yapısı olarak LINQ kartlarını açtı. İşin garibi herkes çok beğeniyor MS'in yaptıklarını. Microsoft bu LINQ işini o kadar ciddiye alıyor ki, C#'ı sırf bu işe destek için güncelliyor. Son günlerde "her şey linq için".
LINQ emekleme sürümünde henüz. Performans darboğazı var. Ama koşmaya başladığında, şu yukarıdaki listenin LINQ entegrasyonu yapmaktan başka çıkar yolu görünmüyor.
Netice
- Halkın SQL'den kurtulalım çırpınışları yerindedir, desteklenmelidir.
- ORM karmaşasına (hele de ticari olanlarına) pek dalmamak lazımdır.
- "Linq to SQL" insanı cezbediyor, bir an evvel uygulamak lazımdır:
- .NET 2.0 uygulamaları öntanımlı olarak LINQ desteklemiyor ama LINQ kullanan bir kütüphaneyi kullanabilir.
- .NET 3.5'ta LINQ kullanmayanı dövüyorlar.
- Performansın kritik olduğu uygulamalara, LINQ takoz olacaktır.
FxCop – Code Analysis Çarpışması
Microsoft'un verdiği iki adet statik kod analiz aracı bulunuyor. Birisi, daha önceden kendi içinde (internal) kullandığını beyan ettiği FxCop. Diğeri de Visual Studio'ya çakılı gelen Code Analysis.
Analiz işine yeni başlayan geliştirici, durduk yere nur topu gibi bir ikilemin içine düşüyor: hangisini kullanmalıyım? İşin duayenlerine sormak istiyor, destek almak istiyor. İnterneti eviriyor, çeviriyor.
Görüyor ki bunun cevabını Microsoft bile vermiyor. Tamamen senin tercihin diyor. Ya da evet, VS 2008'i bekle: çok enteresan şeyler geliyor.
FxCop'ın Code Analysis ile en büyük farkı, onun IDE'den bağımsız çalışan (stand-alone) bir araç olması. Code Analysis, FxCop temelinin IDE'ye entegre edilerek geliştirilmesi demek oluyor. Ama bu şu demek değil sevgili okur: FxCop = Code Analysis.
Code Analysis, FxCop'ın bilmem kaç versiyonundan başladı ama şimdi aynı değiller. İkisi farklı koldan gelişiyor ve ilerliyor. Microsoft bir analiz kuralını FxCop'a yazmış, Code Analysis'e yazmamış olabilir. Yapar mı yapar, kendi söylüyor efendim, benim iddiam değil.
Öte yandan, Code Analysis sadece "Maintainability" ve "Reliability" kurallarını içeriyor. FxCop bunun üzerine "Spelling" kurallarını da içerdiği için daha detaylı analiz yapıyor. Ama Microsoft, Orcas'ta FxCop'ı tamamen kapsadığını ifade ediyor. Güveniyoruz kendisine.
Bir diğer gerçek de şu ki, FxCop her zaman olacak ve öylece bağımsız bir uygulama olarak duracak. Lâkin Code Analysis'in IDE ile, Team Foundation Server ile ilişkileri gitgide gelişecek, kabiliyetleri artacak (misal, Code Metrics). VS ve TFS kullanan ekiplerin olmazsa olmazı hâline gelecek. Varacağımız yer, Code Analysis. Bunu görmek zor değil.
VS 2008 Burada, .NET’in Kaynak Kodu Nerede?
Visual Studio 2008'i heyecanla indirenler, daha evelden vaad edilen .NET Framework'ün kaynak koduna göz atmanın henüz mümkün olmadığını görüyorlar.
Evet, ürünün sunumunda güzel güzel anlatılan bu özelliğin hazır olmadığı kısık sesle belirtildiğinden olsa gerek biraz geç öğreniyorsunuz.
Biz de .NET koduna "step into" ile dalmak için sabırsızlanan kitlenin yatışması için üzerimize düşen vazifeyi yapalım. İçeriden birisinin dediğine göre, kaynak koda dalış için gerekli çevrim-içi sistemin hazırlığı bitmek üzereymiş. Aslında biraz laf arasında, son anda farkedilmiş performans probleminden dolayı sistemin aktifleştirilmediği, biraz daha üzerinde çalışılacağı ve gerekirse VS'ye geçilecek bir hot-fix ile ayağa kaldırılacağı söylenmiş.
...
Bunun yanında .NET camiası, zaten .NET Framework'ün kodlarına epeydir âşina. MS kodu karıştırma gereği duymadığı için Reflector gibi cihazlar, geliştiriciye kaynak kodu tertemiz verebiliyordu.
Ama MS bunun daha ilerisini vaad etti. Görmek ne kelime, içine girip adım adım işletebilirsiniz dedi. Camiayı alevlendiren de bu.
Biraz daha sabır gerekiyor sevgili camia.
MonoRail Pes mi Ediyor?
Açık kaynak kodlu Castle projesinin ASP.NET ayağı MonoRail, bu kulvardaki MVC yolunda en güçlü temsilci olarak görülüyordu. Ta ki Microsoft, resmen MVC implementasyonuna başladım diye ilan edene kadar.
Yalnız geçen hafta ilginç bir gelişme yaşandı. 28 yaşındaki Castle kurucusu Hamilton Verissimo, Microfoft'un MVC laboratuvarına davet edildi. Orada kendisinden MS-MVC'yi incelemesi ve görüşlerini paylaşması rica edilmiş, o da kırmamış sağolsun. Mezkur ziyaretle ve ekiple ilgili değerlendirmesini "MS MVC and the MVC Team" başlıklı günlük kaydında paylaşmış.
Özetle, gidip MVC'nin o anki hâliyle ufak denemeler yaptığını söylüyor. Bu denemelerde MonoRail'e kıyasla yapabildiklerini ve yapamadıklarını listelemiş. Ama bu yapamadığı şeylerin de sebebini MonoRail iskeletindeki sıkı bağlılıklar olarak gösteriyor, MS'i rahatlatıyor bir noktada.
Hamilton, çıkacak CTP sürümünün büyük beklenti içinde olanlar için hayal kırıklığı yaşatacağını ima ediyor. Fazla da MS'i yıpratmadan söylüyor bunu. Sırf geri-bildirim için çıkacağını ve de çalışması için bir sürü iş gerektirdiğini ekliyor. Böylelikle MS-MVC ile ilgili beklentilerimizi dibe indirmiş oluyor. Yalnız ikinci fazından ümitli.
Peki en can alıcı soru: MonoRail ne olacak?
Kendi kendine soruyor ve onurlu(!) bir cevap veriyor: "MS-MVC sunduklarıyla bizi sollarsa, MonoRail dükkanını kapatmanın vakti gelmiştir. Eğer patlarsa, MonoRail 2 ile yola devam ederiz. Onların implementasyonunu bekliyoruz."
Microsoft, açık kaynak kodlu projeleri desteklemek yerine klonlarını yapıp onları silmeye çalıştığı için bolca eleştiriliyor. Yine bu savı destekler bir durum kapıda. Eğer MonoRail biterse, bir kod yığının üzerinde daha güneş batacak.
Hamilton'un yazısının altındaki yorumlar, -belki de onaydan geçtiğindendir- bu ziyareti ve neticelerini destekler yönde: +1'miş.
Ben "-1" diyorum sevgili okur. MonoRail, Microsoft zaten yaptı-yapıyor, biz de gidelim kebap yiyelim, Tuna nehrinde salınalım dememeliydi. Afiyet olsun.
Visual Studio 2008 RTM
Bir süre "Orcas" olarak dillendirilen yeni bebek üretime hazır hâle geldi ve MSDN üyelerine sunuldu. Visual Studio 2008 gelişmiş bir geliştirme platformu. Yanında da .NET Framework 3.5 sürümünü getiriyor.
Bir bakalım ne yenilikler ihtiva ediyor bu "bebek":
- "Eskiler Alırım!"; eskimiş VS kullanıcıları, uygulamalarını aynen VS 2008'de geliştirmeye devam edebilirler. Zira IDE, çok-hedeflilik diye çevrilebilecek multi-targeting özelliğini hâiz. Yani VS 2008'i açıp .NET 1.1 veya .NET 2.0 sürümü için uygulama yazabiliyorsunuz. Böylelikle framework sürümü ile IDE sürümü birbirine bağımlılıktan kurtulmuş oldu.
- Windows Presentation Foundation (WPF) için dâhili tasarım aracı. VS 2005 için eklenti olan bir şeydi, şimdi ürünün bir parçası.
- Bünyeye gömülü olmazsa olmaz AJAX. Tam anlamıyla JavaScript kod tamamlama (intellisense) ve hata ayıklama (debugging) imkânı.
- Debug esnasında .NET Framework kaynak kodunun içine dalış. Hâni Scott bahsetmişti.
- Ve tabî ki veriyle uğraşmanın yeni adı: Linq to SQL. Daha henüz emekliyor bu bebek ama 2010'un sürüm vaktinde olgunlaşacağı vaad edilmiş.
MS yolundaki geliştiricilere hayırlı olsun efendim.
Aboneler buraya: http://msdn2.microsoft.com/en-us/subscriptions/default.aspx
Tümleyenler şuraya: http://www.microsoft.com/express/download/
İlk ASP.NET MVC Kod Örnekleri
Haftalardır ASP.NET'in MVC atağını konuşup duruyoruz. Henüz millet olarak kodlayıp denemiş değiliz. Şimdilik bakınmakla yetiniyoruz.
Bir yandan Las Vegas'tan DevConnections 2007 esintileri vuruyor yüzümüze. üstad Metin Karabiber de, bu esintiyi "vatan borcu" hassasiyetinde ufaktan taşımış, sağolsun.
DevConnections, doğal olarak ASP.NET MVC'yi de büyük bir kitle önünde sergilemek ve ilişkiyi diri tutmak için güzel fırsat. Nitekim Microsoft ekibi fırsatı değerlendirmiş ve bir sunum yapmış. Hanselman ve Elion arkadaşların sunumunu inceleminizi salık veririm.
Sunumdan çıkan ufak notları da buraya nakşedelim. [Parantez içi sözler fakire ait]
- ASP.NET MVC, hayatımıza test-yönelimli geliştirmeyi, gevşek bağlı bileşenleri getireceğine dair söz veriyor.
- URL'ler artık /UrunDetay.aspx?UrunId=26&ShowBasket=true şeklinde saçmalamaktan kurtuluyor, REST ve SEO ile samimi hâle geliyor: /urundetay/kahve-makinesi/showbasket vs. [Aman efendim, en çok sevindiğim şeylerden birisi.]
- üstüne basa basa denen o ki, Web Form'lar bitmiyor. Web Form yerli yerinde dururken, MVC ona alternatif olarak ikram ediliyor. Artık Web Form zorlanan bir şey değil, tercihlerden sadece biri oluyor. [Ha şöyle.]
- Artık gevşeyin diyorlar. Dependency Injection (DI) veya Inversion of Control (IOC) teknikleriyle genişleyebilen uygulamalar yazın, coşun diyorlar.
- MVC altyapısı, ASP.NET'in sınıf hiyerarşisindeki karşılığı olan System.Web'den veriliyor.
- Tüm "açık kaynak" dünyasıyla da barışık deniyor. Meselâ "model" katmanında NHibernate, "view" katmanında Brail kullanabileceğimiz söyleniyor.
Bir "kontrol" sınıfından kod örneği:
[ControllerAction]
public void ShowPost(int id) {
Post p = PostRepository.GetPostById(id);
if (p != null) {
RenderView("showpost", p);
} else {
RenderView("nosuchpost", id);
}
}
Rahatlıkla anlaşılacağı gibi bu metod bir URL'yi temsil ediyor.
URL'ler kontrolörlere yönlendiriliyor. Onlar da bir iş yapıp akışı bir "View"a havale ediyorlar. "Rendering" için klasik Web Form bileşenleri kullanmanın yanında NVelocity, Brail gibi başka motorlar da kullanabiliyoruz. [Evet, gevşek bağlılık sayesinde.]
...
Cümle MVC taraftarı, web'in doğasına aykırı buldukları Web Form'larına nicedir veryansın ediyordu. Şimdi de bu Microsoft implementasyonuna biraz mesafeli duruyorlar. Bakalım perdeler açılıp CTP vitrine konunca kodlayan parmaklar ne diyecek?
Önyargısız takip ediyoruz ey okur.