Daha önce ki yazılarımdan birinde Data Acess Application Block ile alakalı güzel bir örnek yapmıştık.Bu yazıdada hem data access application block'u hemde Caching Application Block'u içeren başka bir uygulama yapıcaz.Uygulamamız bir web uygulaması olacak ama uyarmak isterim ki bu dll sadece web de kullanılmıyor.Yani caching işlemini Windows uygulamalarınızdada kullanabilirsiniz.Uygulamada daha önce hazırlamış oldugum ve içinde manken ve manken resim tabloları olan bir veritabanını kullanıcam.
Öncelikli olarak uygulamanın ilerleyen kısımlarında cach lemek için kullanacağımız manken isim soyisim ve resimlerini alacağımız bir class yazalım ve verileri çekerken Data access application block'dan faydalanalım.Şimdi MankenGetir isimli static bir sınıf tanımlıyacağız ve içine methodlarımızı yazıcaz ;

enterprise library nin en sevdiğim yanı tasarımında abstract factory disagn pattern kullanılmış olması.CreateDatabase methodu webconfig deki tanımlanmış connectionString in name'ini parametre olarak alıyor.Orada connection string belirlerken ProviderName belirtmeniz önemli çünkü bu sayede sql veritabanı kullanmış olduğumuzu söylüyoruz.

şimdi yukarda yaptıklarımızı adım adım yorumlayalım ; Öncelikli olarak aldıgı id değerine göre method geriye tek bir resim dönecek.Normalde ado.net le yapsakdık bağlantı açıp kapatacaktık, configurationManager class'ını kullanarak connectionString'i çekecektik, sorgu için SqlCommand nesnesi oluşturacaktık vs.vs. Burada tek satırla işimizi hallettik ve hem zamandan kazandık hemde daha esnek bir yapı kazanmış olduk. 2. adımda eğer resim null gelirse , daha önceden uygulamamın içindeki Resim klasörünün içine attıgım ResimYok resmini göstermek istiyorum;

bundan sonra bu resmi buradan almam gerekiyor, bunun için BitMap in fromFile methodunu kullandım ve gene BitMap in Save methodu ile MemoryStream üzerinden ram'e attım çünkü resmi byte dizisine döndürmek için bildiğim en kestirme yol bu.Aayrıca Server.MapPath methodu ile resmin server üzerindeki sanal yolunu gösterdim.Eğer resim null gelmediysede gelen resmi geri döndüm.
Şimdi çektiğimiz verileri cach'liyceğimiz 2.bir class daha yazalım çünkü sayfalardaki kontrollerin altlarına kod yazmaktan hoşlanmıyoruz.
Şimdi öncelikle kullanacağımız dll'i referanslardan ekleyelim ;

2.ve son olarak web.config yapılandırması var,bunun kodlarını biz yazmıycaz,visual studio'ya rica edicez o bize yardımcı olucak.
önce web.config e sağ tık ve ;

daha sonrada ;

evet hepsi bu kadardı şimdi caching dll'imizi kullanabiliriz.O zaman CachingMankenGetir isimli sınıfımızı yazmaya başlayalım.Caching'le alakalı işlem yaparken,daha önce data caching de yaptıgımız gibi önce kontrol edicez, cach'de böyle bir veri var mı yok mu , eğer yok ise doldurucaz , var ise aynen var olanı geri döndürücez.Gene buradada key value ilişkisi var.Örneğimizde manken resimlerini cach liycez , bunun için Manken lerin ID leri key olarak tutucaz , çünkü id 'ler primary key oldugu için unique.O zaman hadi yazalım..


olasılık sınıflarını zorlayan güzel bir kod oldu : )) şimdide cache deki veriyi nasıl önbellekten atarız buna bakalım.Aslında bakacak çokda birşey yok tek yapmamız gereken ICacheManager referansı üzerinden Flush methodunu çağırmak ve kullanmak.Bunun için bir method yazalım;

En son olarakta TumMankenleriGetir methodundan dönen datatable'i cache'liycez demiştik, bu işlemide yapalım.

eh artık yazdıklarımızı kullanmanın vakti geldi.Sayfaya methodlarımızdan biraz veri getirelim.. Önce biraz tasarım yapalım ;

eval'le verileri bağlayalım ;

sunuma birkaç satır kod yazalım..

resimleri göstermek için bir resim sayfamız olsun ;

şimdi sayfamızdan biraz veri girelim ; önce veritabanında bulunmayan bir id gireceğim ..

baktıki böyle bir id ye ait kimse yok , resimyok.jpg yi cache ledi ve yolladı, bir kere daha resmi olmayan bir id versek bu sefer hazırdaki cache li resimYok.jpg yi yollıycak.şimdide resmi olan bir kişiye ait id yazalım.Mesela kendi id mi :)

ben çok eğlendim , umarım sizde okurken eğlenmişsinizdir.Bol yazılımlı günler dilerim..