ASP

ASP’de classlar

Tam olarak nesne yönelimli bir dil olmamasına rağmen, ASP’de Class lar yazarak, hazırladığımız web sitesini yazacağımız classlar ile yönetebiliriz. ASP de class yazmak deyince bazılarının aklında hiç birşey canlanmıyor olabilir. Ancak her ne kadar performans açısından bize çok fazla bir artı getirmeyecek olsa da ASP de class yazarak uygulama geliştirmek size birçok açıdan avantaj sağlayacaktır.

ASP ya da PHP ile web uygulamaları geliştirmeye başlayan birisi ilk başta inline (spagetti) kod diye tabir edilen şekilde web sitelerini oluşturmaya başlar genelde. Yani HTML taglerinin arasına gerekli olan server-side işlemleri yapan scriptlerini koyar ve HTML ile kullandığı web dilini içiçe kullanır. Bu şekilde kod yazmaya başlayan birinin eninde sonunda varacağı nokta, birçok yerde aslında aynı şeyleri yaptığının farkına varmak ve her sayfada yaptırması gereken benzer işlemler için neden bu kadar çok vakit harcadığını düşünmeye başlamaktır. Daha sonra bu kişi Function ve Sub larla tanışır ve bu aşamadan sonra da yapması gereken bazı standart işlemleri artık birer fonksiyon olarak tanımlayarak uygulamasının her aşamasında kullanmaya başlar. Eğer bu yöntem konusunda tecrübe kazanmaya başlarsa yapacağı son uygulamalar çoğu kez, HTML tagleri arasına sadece fonksiyon isimleri yazmak şeklinde gelişecektir.

Bir web uygulamasında işlemleri fonksiyonlar halinde belirleyerek çalışmak aslında en azından ASP için son nokta olarak görülebilir. Bu şekilde yazılacak olan uygulamalarda herhangi bir işlemin çalışma mantığının değiştirilmesi gayet kolay hale gelmektedir. Çünkü işlemleri yapan fonksiyonlar aynı tek kaynaktan geleceği için o tek kaynak üzerinde değişiklik yapmak sitenin işleyişlerini değiştirmeye yetecektir.

Bu aşamadan sonraki aşama ise, veri saklama ve işlem yapma durumlarını kategorilendirmek ve kategorilendirilen bu işlemleri tek bir noktadan yönetmeye çalışmak olmalıdır. Bu nedenle web yazılımcısı bu noktada değişken ve işlem kümeleri oluşturmalı, bu kümeleri tek bir noktadan çağırabilmeli ve yönetebilmelidir. Bu doğrultuda Class yapılarını kullanmak gayet yerinde bir seçim olacaktır.

ASP de basit bir class değişken, fonksiyon ve sublardan oluşur. Daha ötesinde public private yapılar, property ler, set, let ve get anahtar kelimeleri gelir. Son saydıklarım olmadan da fonksiyonlarınızı organize etmek için classları kullanabilirsiniz.

Örneğin, aşağıdaki fonksiyonlara ihtiyacımız olsun:

  • querystringleri temizleyerek alacak (safeGet)
  • POST edilmiş form değerlerini temizleyerek alacak (safeForm)
  • genel olarak SQL injection a karşı herhangi bir text i temizleyecek (clearText)
  • herhangi bir stringi kontrol ederek numeric bir değere, eğer numeric değer içermiyorsa sıfıra çevirecek fonksiyonlar (makeInt)

Bu fonksiyonları bir class içinde tanımlayabilir, mesela bu classa da sistem ismini vererek aslında sistem ile ilgili işlemler yapan tüm fonksiyonlarınızı buraya koyabilirsiniz.

Class sistem

Public Function clearText(strData)

  strData = replace(strData,">",">")
  strData = replace(strData,"<","<")
  strData = replace(strData,"""",""")
  strData = replace(strData,"'","'")
  strData = replace(strData,"`","`")
  strData = replace(strData,"~","~")
  strData = replace(strData,"^","^")

End Function

Public Function safeGet(strQuery)
  safeGet = clearText(request.querystring(strQuery))
End Function

Public Function safeForm(strFormField)
  safeForm = clearData(request.form(strFormField))
End Function

Public Function makeInt(strMakeInt)
  strMakeInt        = Trim(strMakeInt)
  If IsNumeric(strMakeInt)=True Then
    makeInt        = CInt(strMakeInt)
  Else
    makeInt        = 0
  End If
End Function

End Class

Yukarıda tanımladığımız class ı herhangi bir sayfaya include edip aşağıdaki şekilde kullanabiliriz.


Set system = new sistem

'data diye bir query alalım
data = system.safeGet("data")

'page ismindeki form değerini alıp integer a çevirelim
page = system.makeInt(system.safeForm("page))

Aynı şekilde database işlemleri yapan (örn: select, insert, update, delete) fonksiyonlar yazarak bir database classı da oluşturabiliriz. Tabii bu kullanımlar aslında nesnel programlama ile çok da ilgisi olmayan konular. Sadece fonksiyonlarımızı organize etmiş ve her yerde kullanılabilir hale getirmiş olduk. Classların ASP de nasıl nesnel programlamaya yönelik kullanılacağını ilerleyen günlerde yazmayı düşünüyorum şimdilik sadece bilgi vermiş olayım.

ASP anlatmak ve kullanmak

Yıllar önce ASP ile web programlamaya giriş yapmıştım. İlk yaptığım site içerik yönetim sistemine sahipti ve fakat session nedir tam olarak bilmediğimden yönetim paneline giriş script içinde hardcoded olarak yazılmış bir kullanıcı adı ve şifreyi querystringden gelen şifre ve kullanıcı adı ile karşılaştırıyor ve uzunluğu 250 karakter kadar karışık harfler ve rakamlardan oluşmuş bir dosyaya redirect ediyordu.. Boğaziçi Üniversitesi Yapı Kulübü için seneler önce yaptığım bu siteyi Hakkı Öcal’ın ASP kitabını okuyup bitirdikten sonra hemen değiştirmiştim.

ASP server tabanlı uygulamaların nasıl çalıştığını öğrenmek için iyi bir dil idi. Windows XP ile beraber IIS ile kullanmak çok kolaydı. Zaten windows kullanıyorduk, o nedenle bir de işletim sistemi öğrenmek gibi bir derdim yoktu. Birçok kitap, online kaynak araştırmıştım, okumuştum. Zaten ben öğrenmeye devam ederken bazı işleri de bir arkadaşımla beraber ASP olarak geliştiriyorduk. İhtiyaç hasıl oldukça daha çabuk öğrenmek içten bile değildi. Hızlı hızlı öğrendik. Recordsetlerden JET driverı ile conn.execute lere geçtik zamanla. O da yetmedi Access de aynı anda iki farklı ziyaretçinin nasıl kayıt girebileceğini çözdük. Sonrasında dictionaryler, classlar, propertyler falan derken kodu tasarımdan ayırmaya ve CMS yazmaya kadar gitti mesele.

Son zamanlarda artık ASP dünyasından uzaklaşmış durumdayım, Linux, MySQL filan derken PHP, Ruby, Perl, Python gibi seçenekler daha cazip hale geldi benim için. Hatta .NET kadar derli toplu olsa Java ile ilgilenip .NET e göz ucu ile bile bakmayacam ama neyse… Son günlerde ASP yi az da olsa kullanmam gerekmiyor değil. Kullanıyorum. Ama her kullandığımda şu ASP tutorial ve kitaplarını yazanlara, Vbscript i dayatan Microsoft’a kızıyorum sürekli. Neden mi?

Bugün herhangi birimiz ASP öğrenmek istese google girip arama yaparız doğal olarak “ASP Tutorial”, “ASP Lessons” filan diye. Birçok kaynak bulabiliriz ama nedense hiçbir kaynak size ASP de bir eval fonksiyonu olduğundan bahsetmez. Dictionary, Class kullanımlarını anlatmaz. Hatta neredeyse hiçbir kaynakta ASP yazarken JScript kullanmanızın bazı açılardan neden daha faydalı olabileceği yazmaz. Siz yıllarca orda burda “ASP Jscript ile de yazılır evet ama Vbscript daha iyi” der durursunuz çünkü size öcü gibi gösterilmiştir.

ASP nin maalesef bir php.net sitesi yok. MSDN ve karışık arayüzü var, firefoxda doğru düzgün çalışamıyor bile. Tüm tutorial ve kaynaklar beginner seviyesine hitap ediyor. Halbuki insanlar ASP de eval fonksiyonu olduğunu öğrenebilmeliler. Halbuki insanlar javascript bildikleri takdirde birkaç ufak ekstra fonksiyon öğrenip ASP yazmaya başlayacaklarını öğrenebilmeleri lazım. Dictionary, Class gibi yapıları adam gibi anlatan kaynaklara ihtiyaçları var.

Denilebilir ki kardeşim ASP.NET geldi ne ASP si. Evet ama ben her bir yapı için ASP.NET kullanmayı sağlıklı bulmuyorum. Prosedürel kod yazmanın da artıları var ve Microsoft’un standart ortamında sunucu taraflı ASP kullanabiliyorum. Bence duruma göre dil tercihi yapmak gerekiyor zaten. Her zaman ASP.NET iyi değil bence. Neyse kimseye birşey ispatlama derdinde de değilim zaten. ASP yi bugüne kadar anlatıyorum deyip anlatamayanları, kullanıyorum deyip kullanamayanları kınıyorum sadece.