ASP'den ASP.NET'e Doğru
Fazla olmadı değil mi ASP'ye başlayalı. Sanki daha dün gibi. Statik HTML içeriğini
canlandırmaya yepyeni bir yaklaşım getirmişti ASP. ASP, Web sayfalarımızı, CGI'ın
performans darboğazına düşürmeden, HTML literalleri arasına yazdığımız (in-line
coding) sunucu taraflı script kodlarıyla, tepki veren, veritabanıyla ilişki kurup
dinamik içerik üretebilen canlı bir mekanizma sundu bizlere. ASP, zamanın devrimiydi.
İyi bir fikirdi. Ama zaman da akıp gidiyordu.
Sahiden ASP'nin kaç versiyonu çıktı?
ASP'nin ilk sürümünün 1996 yılında çıktığı söyleniyor. Kod adının "denali"
olduğu ve NT Option Pack 3 ile geldiği de. ASP'nin 2. versiyonu NT Option Pack 4
ve Windows 98 üzerinde Personal Web Server aracı ile kullanılmaya başlandı. Bir
takım performans iyilemeleri ve bir kaç metod eklentisiyle ASP'nin 3. versiyonu
Windows 2000 ile duyuruldu. Bu sürümü, PWS ile çalışanlar hiç görmedi ne yazık ki.
Çünkü ASP 3, sadece Internet Information Services (IIS) 5'e özgüydü.
Ve artık tüm bunlar geride kaldı. Microsoft, Beta 1'inden bu yana, herkesin ilgisini
çeken, daha önceden bildiklerimizi allak bullak eden bir teknolojiyi üretti:
.NET. İnternetle entegre olmuş bir yazılım geliştirme platformu olarak
tanımlıyoruz .NET'i. Bu tanım elbette yeterli değil. Çünkü .NET'i biraz kurcalamanız,
onun bir üründen öte, radikal bir yaklaşım olduğunu anlamanıza yetecektir. Peki
ASP ile .NET nerede buluşuyor? Neden adlarını aynı sohbette anıyoruz?
Cevap oldukça basit: ASP ile .NET buluşup ASP.NET adında, nefes
kesen bir teknolojiye bürünüyor. Bu yazımız, ASP.NET'in genel çerçevesinde bir gezinti
olacak.
ASP'nin handikapları...
ASP (Active Server Pages), kısaca .asp uzantılı dosyaların, bir ISAPI süzgeci olan asp.dll tarafından parse edilmesi, metin arasındaki script talimatlarının belirlenen script motoru tarafından yorumlanması ve elde edilen çıktıların istemciye gönderilmesi esasına dayanan bir web sayfası programlama teknolojisidir. ASP, web programlamayı kolaylaştıran, temel işlevleri yerine getiren bir nesne ortamı sunmaktadır. Bu nesneler, HTML metni aralarında belli karakterlerle ayrılarak yazılan script bloklarında kullanılmaktadır. ASP, sunucuda kayıtlı bulunan COM Ancak, madalyonun öteki yüzünü çevirdiğimizde, ASP'nin bir çok dezevantajını görmek kaçınılmazdır. Hiç düşünmeden ilk söyleyeceğimiz, ASP'nin bir script yorumlayıcısına bağımlı olmasıdır. Bu, performansı etkileyen en önemli faktördür. Script kodları bilindiği gibi direk yürütülebilir talimatlar değildir. Bir yorumlama (interpreting) süreci gerektiğinden, doğal makine koduna göre hayli yavaş işletileceklerdir. Maalesef ASP sayfalarının içerdiği kodlar, her istekte tekrar yorumlanarak gönderiliyor. ASP'nin nesne topluluğu, webde kaçınılmaz şekilde kullanılan çok işlem için yetersiz kalıyor. Bu durum, üçüncü parti COM bileşenleriyle çözülüyor. Ancak bu da ayrı bir sorunu getiriyor. Çünkü çoğu bulundurma servisi, sunucu sisteme sağlık-sıhhat nedeniyle her bileşeni kurmuyor. Bunların yanında ASP script kodlarının, HTML literalleri arasına karıştırılarak kodlanmasının da ("spagetti kodlama" deniyor) getirdiği güçlükler var. Bizden bir deyimle, kodların arap saçına dönmesi gibi, mimariden kaynaklanan, programcı ve tasarımcıyı kimi zaman kavga ettiren bir durum. Bir de script dilinin sınırlarının dışına çıkamamak var. Örneğin bir Nesne Yönelimli (OO) modelleme yapamamak. Tekrar kulanılabilir sınıflar, arabirimler yazamamak... Çünkü elinizdeki script dilleri, size bu desteği vermiyor. Ya Durum Yönetimi? Veya daha anlaşılır adıyla State Management... Yani farklı http istekleri arasında bir ilişki kurulması ve bir web sayfasının bu istekler arasında aynı durumu (hâli) paylaşması. Bir öz referanslı (self-referenced) formu post ettikten sonra sayfa tekrar yüklendiğinde, form elemanlarının kullanıcının post ederken nasılsa o halde görünmeleri için yazdığınız if denetimlerini filan hatırlayın... Ama artık bunları unutmanızda bir sakınca yok. Projeyi bitirdiniz.. Üzerinde haftaların emeği bulunan, güzel bir site oldu. Ve karşıya teslim ettiniz. Ama nasıl? Tabii ki yazdığınız ASP kodları, mantığınız, size özel fikirler.. Hepsi, teslim ettiğiniz CD'de. Müdahale edilebilir, kurcalanabilir. Bu da, kodların düz yazı dosyalarında saklanan scriptler olmasının getirdiği önemli dezavantajlardan biri işte. Milyonlarca ASP geliştiricisi, tüm bu bahsettiğimiz çıkmazları yaşadı. Şu da olsaydı, bu da olsaydı diye her gün yakındı. İşin iyisi, Microsoft ASP'cilerin bu yakınmalarını takip edip, not alıyormuş. Bunu anlamak için ASP.NET'in getirdiklerine biraz göz atmak yeterli.
ASP.NET ve .NET
ASP'nin masaya yatırıldığı, üzerinde çok tartışıldığı besbelli. Sonuç: Microsoft, ASP'yi sil baştan yeniden yazdı beyler. Ve dünyaya yeni yazılım geliştirme platformu .NET'in bir ayağı olarak duyurdu bu yeni ASP'yi. Beta 1 zamanlarında adı ASP+ olarak telaffuz edilen yeni ASP'nin adı ise ASP.NET! Peki neden ASP 4.0 değil de ASP.NET? Çünkü, ASP.NET yeni bir sürüm değil! "ASP'nin yeni sürümü olan ASP.NET" diye bir anons duyarsanız, anonsçunun hatalı bir ifade kullandığını bilin. ASP.NET, bir dll'e dayanan ISAPI süzgeci olmaktan çok öte, .NET platformunun webe hizmet eden HTTPApplication Bunca lafı niye söylüyouz? ASP.NET'in, .NET bünyesinde bir varlık olduğunu anlatmak için. Hatta öyle ki, bir kaç satır kodla oluşturacağınız bir uygulama ile ASP.NET dosyalarını web sunucu (IIS) olmadan çalıştırabilirsiniz. Bir web sunucu olmadan! .NET ne kadar ciddiyse, ASP.NET de o kadar ciddi bir teknoloji. Hep ASP.NET'i övdük ama, bu teknoloji bize neler getiriyor bir tanesini bile söylemedik. İşte şimdi sıra onlara geldi..
ASP.NET Geldi, Ama Ne Getirdi?
Hemen söyleyelim de rahat bir nefes alın: artık VBScript yok! Visual Basic dilinden script işleri için türetilmiş, klasik ASP sayfalarının resmi dili olan VBScript edisyonuna artık veda ediyoruz. ASP.NET, daha önceki paragraflarda bahsettiğimiz gibi .NET'in ayrılmaz bir unsuru olduğundan dolayı, .NET uyumlu tüm dilleri kabul eden bir ortam haline geldi. Nedir bu .NET Uyumlu diller? Microsoft'un kendi sundukları: Visual Basic'in halefi Visual Basic .NET ve Java'yı andıran, yepyeni bir dil: C#dil-bağımsızPerl.NET. Bu demek oluyor ki, web uygulamalarımızı artık gerçek bir programlama dili kullanarak oluşturacağız. Kesinlikle doğru! Hatta bir şey daha. Artık ASP.NET geliştiricileri, göğsünü gere gere "ben programcıyım" diyebilme hakkına sahip. Çünkü ASP.NET sayfaları derleniyor! Yazdığınız kodlar, işlerlik bulmadan önce, .NET uyumlu derleyiciniz tarafından ara koda (MSIL, daha sonra işleyeceğimiz konular arasında) ardından da doğal makine koduna dönüştürülüyor. Bu size, klasik ASP'ye göre büyük bir performans kazandırıyor. Performans'dan ziyade, elimizdeki dillerin Object Oriented (Nesne Yönelimli) programlamayı tam olarak desteklediğini unutmayalım. Tabii ki, Nesne Tabanlı (Object Based) bir dil olan VB nin çehresi değişen sürümü VB.NET de dahil bunlara. .NET'in devasa sınıf kütüphanesi (Base Class Library - BCL) de, bütünüyle ASP.NET programcısının hizmetinde. Bunun hemen hissedebileceğimiz taraflarından birisi, artık basit bir mail gönderme veya dosya transferi işleri hemen için üçüncü şahıslara koşmak zorunda olmamak! Bu zengin kütüphanenin kıymetini, kullamaya başladıkça çok iyi anlayacağız. Önemli bir yenilik de Sunucu kontrolleri (Server Controls). ASP.NET, sunucu tarafında olay güdümlü olarak programlanabilen, sunum (presentation) ile mantığı (logic) başarıyla ayıran bir bileşen seti ve mimarisi sunuyor. Bu bileşenler, koddan bağımsız olarak sayfa üzerine yerleştirilebiliyor ve ayrı dosyalarda bu kontroller için programlama kodları yazılabiliyor. Nitekim tasarımcımız ve programcımız bir daha kavga etmeyeceklerine söz veriyorlar. Biraz karışık gibi. Ama bu konu üzerine çok yazı yazacağız, şimdilik genel çerçeveyi çizmekle yetiniyoruz. Otomatik durum yönetimi de sunucu kontrollerinin çok çarpıcı bir özelliği. Bu demek oluyor ki, farklı HTTP istekleri arasında sayfa üzerindeki sunucu kontrolleri, durumunu koruyabiliyor. Biz fazladan hiç bir şey yapmıyoruz. ASP.NET bunu otomatik hallediyor. Üstelik bu durum bilgisini sunucuda değil, istemciye gönderdiği form unsurunda saklıyor. ADO.NET ise, veri erişim modelimizin yeni adı. Yine bir çok yenilik var ve RecordSet de artık mazi oldu. ADO.NET, ileride örnekleyerek anlatacağımız yazıların büyük bir kısmını teşkil ediyor. Yazdığım kodları koruyabilir miyim? Evet, kesinlikle. ASP.NET size kaynak kodlarınızı derleme ve derlenenenleri kullanma olanağı sunuyor. Yani bir web projenizin çalışabilmesi için artık kaynak kodlarınızı dağıtmanız gerekmiyor. Artık size özel kodlar, gerçekten size özel kalıyor. Derlenmiş sınıf dosyalarınızı, yani "assembly"leri (.NET bileşenleri) verdiğiniz kişi, iyi bir ara dil (MSIL) programcısı olmadığı sürece kodlarınızı anlayamaz :). Özetle ASP.NET, Kaynak Kod Mahremiyetini (Gizliliğini) getiriyor. Bunlara ilaveten daha bir çok yenilik daha sayabiliriz: uygulamalarımızın dünyaya standart yollardan açılan penceresi Web Servisleri; yazılım geliştirme araçlarının "kral"ı diyebileceğimiz Visual Studio .NET'in ASP.NET'e tam desteği; hiyerarşik ve ayrıntılı ASP.NET Yapılandırma olanağı; çeşitli Caching (içerik bekletme) seçenekleri; tekrar kullanılabilir Kullanıcı Kontrolleri ve Özel Kontroller; sicil kaydı (registration) gerektirmeyen .NET bileşenleri; taşınabilir cihazları hedef alan özel kontroller; geliştirilmiş yapısal Hata Kavrama (Error Handling) yeteneği; çerez kullanmadan oturum (Session) yönetimi, vs...
Netice
.NET yepyeni ve radikal bir strateji. "Microsoft'un Java'ya cevabı" şeklinde spekülatif olarak lanse edilse bile, Microsoft'un .NET'i bir cevap olmaktan öte, tüm ürünlerinin yeni yörüngesi olarak belirlediği kesin. .NET için standartlaşma alanında da çalışmalar yapılıyor. Değişik işletim sistemi platformları üzerinde, .NET'in çalışma zamanı proses yöneticisi CLR (Common Language Runtime) yazmak için uğraşılar var. .NET uyumlu dil yazmak için gerekli spesifikasyonun (CLS) ECMA'ya gönderildiği de belirtiliyor. Tüm bunlar, Microsoft'un gerçekten iyi bir iş ortaya çıkardığına işaret ediyor. Bu yazıda, üstünde durduğumuz ASP.NET ise, .NET platformu için web uygulamaları geliştirme teknolojisi. ASP.NET, kısmen ismini paylaştığı ASP teknolojisinden çok farklı bir mimari sunuyor bize. Artık web uygulamalarımızda nesne yönelimli modern diller kullanabilecek, zengin bir sistem kütüphanesine erişebilecek ve yazdığımız kodu derleyebileceğiz. Ve daha nice şaşırtıcı yenilik. ASP ne olacak peki? Artık ASP'ye elveda demenin zamanı geldi arkadaşlar. ASP'nin yeni bir sürümü çıkmayacak. Ama bu demek değil ki, ASP.NET, ASP'yi ortadan kaldırıyor. ASP.NET kurulmuş bir sistemde, ASP'ye hiç bir şey olmuyor. Çünkü ASP.NET web formu dosyaları .aspx uzantılı olarak saklanıyor. ASP dosyalarımızı aynen kullanmaya devam edebiliyoruz. (Yalnız ikisinin ayrı "Session" veya "Application" kapsamları kullandığını belirtelim.) Yazımıza ASP ortamının kısıtlarını anlatarak başladık. Daha sonra ise, ASP.NET'in bu durumlara (ve ek olarak) ne gibi çözümler getirdiğinden bahsettik. Bundan sonra da ASP.NET'i yazmaya devam edeceğiz.
