Makale Özeti

Microsoft'un en son Hazinran 2005'te yeni versiyonunu piyasaya sürdüğü Enterrpise Library defalarca aynı kod bloğunu yazmaktan bıkan ve yazdığı kodlarn daha rahat taşınabilir hale gelmesini isteyen Uygulama Geliştiriciler için hazırlanmış, daha önceki Uygulama Bloklarının "çatı-yapı" sıdır Bu makalede Enterprise Library'nin tarihsel gelişimi, ne olduğu, nasıl kullanıldığı örnek bir uyglamayla beraber anlatılmaktadır.

Makale

ENTERPRISE LIBRARY’E GİRİŞ

 

“Defalarca aynı kodu yazmaktan bıktum; bir datagrid’i doldurmak için neden  hep aynı kod bloğunu yazıyorum”;” Bizim kullandığımız server  çeşidi değişirse benim kodu baştan aşağıya değiştirmem lazım” gibi sorunları olanların okumalarında faydası olacak bir makale dizisinin başındayız. Biz Uygulama Geliştiriciler, çok sık kullandığımız yapıları “copy-paste” etmek yerine, aynı bir katman yaratıp orada metodlar oluşturarak, gerek duyduğumuzda o metodları çağırırız. Özellikle verilere ulaşmada, sunucuya ulaşmada fayda sağlar bu bize. Bu makalede ise, bu işi bizim yerimize Enterprise Library’nin  nasıl yaptığını, EL’nin tarihsel gelişimini ele alıp, EL’yi kısaca tanıtarak ufak bir örnekle göreceğiz.

 

 

Microsoft’un Patterns and Practices (p&p) grubunun yıllardır ulaşmaya calıştığı bir hedef vardı:’Yazılımcılar için açık kaynak kodu görevi görecek ve ortak işler için, tekrar tekrar kullanılabilecek yapıları içeren  Uygulama Alanları (Application Blocks) oluşturmak.’ p&p grubu  birçok Uygulama Bloğunu oluşturmuş ve kullanıma sunmuştu  Mesela  Microsoft Data Access Application Block (bundan sonra kısaca DAAB diyecez) ve Exception Management Application Blok’u (bundan sonra kısaca EMAB diyecez) 2002 yılında piyasaya sürmüştü.  Bu bloklar güçlü ve faydalı  araçlardı (hala da öyleler) çünkü uygulamaların daha sürdürülebilir, ölçeklenebilir ve etkili olmalarını sağlıyorlardı. Sınıfları, ara yüzleri ve static metodları içeren bu bloklar, SQL Server veri bağlantılarını ve hata ayıklama mekanizmasını çok kolay hale getiriyorlardı. Ayrıca bu blokların kullanılması ile   bug   oluşma ihtimali de azaltılıyordu çünkü bu bloklar      programcıların yaşadıkları sorunlarla beraber geliştirilmiş ve birçok farklı bölgedeki farklı programcılar tarafından kullanıldıkları için de bloklarda oluşabilecek hatalar sıfıra indirilmişti.   Hazır kullanılabilir olmaları da projelerin daha kısa sürede bitmelerine ve etkili kodlar yazılmasına olanak sağlıyordu.      Ancak o zamanlar—ki şu anda da-- var olan sorun, bu uygulama bloklarının birbirlerinden  oldukça bağımsız olmalarıydı.

 

 

 .NET ile  çözümler üreten global danışmanlık firmasi Accenture; stratejik bir kararla      Avanade  ismiyle  ayrı bir firma kurup, Microsoft’un p&p grubunun oluşturduğu Uygulama Bloklarını temel alan .Net Uygulama Geliştirme Framework’unu ACA.NET adiyla piyasaya sürdü. Daha sonra, Avanade firmasi Kasım 2004 yılında Microsoft’a partner oldu ve Ocak 2005’te Enterprise Library’nin ilk sürümü piyasaya çıktı. Enterprise Library de,  Avanade  Aca.Net 2.0 Framework’ü ile Microsoft’un Pattern and Practises’un (p&p) Uygulama Bloklarının birleşiminden oluşturulmuştur. Yeni özellikler (community) gruplardan gelen geri dönüşlerde değiştirilmiş ve eklenmiştir.  Enterprise Library, o zamana kadar oluşturulan uygulama bloklarının  uygun görülenlerinin katıldığı, ortak dizayn ve kodların kullanıldığı  bir “çatı  yapı” şeklinde nitelendirilebilir.. Haziran 2005’te de bunun yeni versiyonu geldi. p&p’nin oluşturduğu tüm Uygulama Blokları bu çatı yapıya dahil edilmemiş olmakla beraber, zamanla yeni blokların ekleneceğini söylemek bir kahinlik olmaz. Hala daha önce oluşturulmuş Uygulama Bloklarını ayrı ayrı yükleyip kullanmak mümkündür.( DAAB1.0 ve DAAB2.0 gibi.)

 

 

Burada eklememiz gereken birşey var, Enterprise Library .Net Framework’un bir parçası değildir ve ücretli de değildir. Enterprise Library’i bilgisayarınıza,  Microsoft’un sitesinden

yüklemelisiniz.(Tabi Net Passport’unuzu girmeniz ve Net Passport’unuz yoksa da almanız gerekecek:). Yüklemek için de  Bilgisayarınızda:

            ···Windows 2000; Windows Server 2003; Windows XP Professional Edition dan biri,

···Microsoft .NET Framework version 1.1;

···Microsoft Visual Studio .NET 2003 Development System (Enterprise Architect, Enterprise      Developer, ya da Professional Edition) yüklü olmalıdır.

···Bazı Uygulama Blokları ve örnekler Microsoft SQL Server, Oracle 9i veya DB2 gibi database ürünlerine ihtiyaç duyabilirler.( Eğer DB2 database kullanılıyor ise,IBM UDB 8.1.2 data provider’ına da ihtiyaç vardır) (Bu makale için Northwind database’i ve SQL server gerekli)

···Ayrıca Unit Test denilen, yeni bug’lar oluşturup oluşturmadığımızı  test etmek için  kullanılan araç için de de bilgisayarımıza Nunit 2.1.4’ü yüklemeliyiz.(bu makale için bunu es geçebilirsinizJ)

 

 

 

Şimde de bu Uygulama Bloklarının neler olduğunu görelim. Uygulamalarımızda bu bloklardan istediklerimizi kullanabiliriz. Hepsini bir anda kullanmak zorunluluğu olmamakla beraber, ileriki makalelerin konularında daha detaylı değineceğim üzere, bazı Uygulama Bloklarının  bazı başka Uygulama Bloklarına  bağımlılıkları (dependency) bulunmaktadır .Mesela DAAB Configuration Access Blok’a bağımlıdır.

 

 

 

 

Caching Application Block(CaAB):  Uygulama Geliştiricilerin local cache’lerini uygulamalarına eklemek için oluşturulmuş bir bloktur.

 Configuration Application Block(CoAB): Uygulamaların configürasyon bilgilerini okuyup yazmalarını sağlar

Data Access Application Block(DAAB):  Database’le yapılacak tüm işlemleriı Uygulamalarımıza eklememizi sağlayan bloktur.

Cryptography Application Blok(CrAB): Programcıların encryption ve hashing özelliklerini uygulamalara eklemelerini sağlar

Exception Handling Application Block(EHAB):  Programcıların,   uygulamanın mimari katmanları içerisindeki hataları ayıklamak için tutarlı stratejiler oluşturmalarını sağlar.

Logging and Instrumentation Application Block(LiAB): Varolan standard loglama ve intrumantasyon özelliklerini uygulamalara eklemeyi sağlar.

Security Application Blok(SAB):Güvenlik özelliklerini  uygulamalarımıza eklememizi sağlar. Uygulamalar bu uygulama bloğunu çok çeşitli durumlarda kullanabilirler. Mesela kullanıcıların database’e  ulaşmaları için kimlik doğrulama ve yetkinlendirme  (authenticating and authorizing) işlemlerinde,  profil bilgileri ve rol lerini almada, kullanıcı profil bilgilerini cachlemede kullanılırç.

 

 

 

 

Şimdi de hep beraber  Enterprise Library’de, Data Access Application Blok’u kullaranak  basit bir web formu oluşturup, web formundaki datagrid’i Categories tablosundaki tüm bilgilerle  dolduralım.  Buradaki amacımız sadece Enterprise Library’nin kullanımı hakkında önbilgi sahibi olmak. Adini yazgelistirEL koyduğumuz bu minik uygulamada, Enterprise Library’inin DAAB’ını ve CAB’ını  kullanabilmek için gerekli olan .dll’leri Reference dosyasının üzerini ağ tıklayıp, Add Reference’i seçerek ve Browse tuşuna basıp

C: \Program Files\Microsoft Enterprise Library June 2005\bin’e  giderek, eklemeliyiz. Bu.dll’lerin ismi aşağıdadır:

 

Eklenecek .dll’ler:  

Microsoft.Practices.EnterpriseLibrary.Data.dll  Microsoft.Practices.EnterpriseLibrary.Configuration.dll

 

Daha sonra da  oluşturduğumuz Form1 isimli formun arka kod bölümünde,

Bunları kullabilmemiz için import etmeliyiz.

 

 

VB.NET de:

Imports Microsoft.Practices.EnterpriseLibrary.Data
Imports Microsoft.Practices.EnterpriseLibrary.Data.Sql

 

 

C#.NET’de:

 

Using Microsoft.Practices.EnterpriseLibrary.Data;
Using Microsoft.Practices.EnterpriseLibrary.Data.Sql;

 

 

 

 

 

 

 

 

Daha sonra da Page_Load(….) event’ine aşağıdaki kodları ekleyelim:

 

 

VB.Net’de:

 

Dim db As Database = DatabaseFactory.CreateDatabase()
 
Dim sqlCommand As String = “Select * from Categories”
Dim dbCmdWrapper As DBCommandWrapper=db.GetSqlStringCommandWrapper(sqlCommand)
 
 
DataGrid1.DataSource = db.ExecuteReader(dbCmdWrapper)

DataGrid1.DataBind()

 

 

 

 

C#.Net’de:

 

Database db = DatabaseFactory.CreateDatabase();

 

string sqlcommand="Select * from Categories";

DBCommandWrapper dbCmdWrapper=db.GetSqlStringCommandWrapper(sqlcommand);

 

 

DataGrid1.DataSource=db.ExecuteReader(dbCmdWrapper);

DataGrid1.DataBind();

 

 

 

Burada dikkatle bakılırsa,database’den DataGrid1’I doldurmamıza rağmen,

 

 ···database,

···SERVER,

···connection bilgisi kodlarda bulunmamaktadır.  Sadece ExecuteReader()  metodu ile emrimizi çalıştırıp, sonuçları okuyoruz. Tüm database’e özel bilgiler, Enterprise Library’inin GUI aracı ile ayarlanabilen farklı configurasyon dosyasında saklı tutulmaktadır.

 

DatabaseFactory sınıfı, Configuration Application Blok’u kullanarak,  oluşturulmak üzere Database’den devşirilmiş class’ın “bağlantı cümlesi” nin  ve tam adının bilgilerinin alınmasını sağlar. Bizim burada herhangi bir şekilde ayrı kodlarla bunları belirtmemize gerek yok.Grafik Ara Yüz’ü ile bu ayarı nasıl değiştirebildiğimize bir bakalım şimdi:

 

 

Configurasyon  dosyasına ulaşmak için de, Start Menu --> Programs --> Microsoft Patterns and Practices --> Enterprise Library-June2005 --> Enterprise Library Configuration’ı açtığımızda karışımıza çıkan ekrandan File à Open Application’dan Web Uygulamamızın Web.config dosyasını bularak (Windows uygulamalarında  App.config dosyasını) seçmeliyiz.

 

 

 

 

 

 

 

Bunu yaptıktan sonra, GUI aracı, Application isimli ağaç düğümü  (tree node) ekler.  Biz Application’in ismini, üzerini sağ tıklayarak yazgelistirEL diye degistirelim

 

 

 

Daha sonra da sağ tıklayıp  blokları içerisinden  New --> Data Access Application Block’u seçersek iki tane ikincil düğüm eklenir: Configuration Application Block ve Data Access Application Block. (Burada Enterprise Library’deki diğer bloklara da ulaşılabilir)

 

 

 

 

 

 

 Configürasyonda (Configuration Block’ta )yaptığımız ayarlar Web.config’de saklı tutulurken (windows uygulamalarında  App.config’de); data bağlantısı ile alakalı ayarlar  (Data Access Application Block)  dataConfiguration.config’de saklı tutulur. Kodu yazarken belirttiğim gibi, kod’da veri bağlantısı hakkında hiçbir bilgi yoktu. İşte veri bağlantısı hakkındaki bilgileri biz, Enterprise Library aracılığyla tutarız. Bağlantı bilgilerini girmek için  SqlConnection isimli düğümü açarız. Burada istediğimiz kadar değişken kullanabiliriz ancak default olarak, Connection String’te de olduğu gibi 3 tane değişken bulumaktadır. Bunlar  database, server, ve Integrated Security dir. Name kısmına değişken adını, Value kısmına da değerini yazarız.

 

Biz Northwind database’ne kendi bilgisayarımızdaki server’la bağlanacağımız için verileri ona göre gireriz.

 

 

 

 

 

 

 

 

 

 

Şimdi de, uygulamamızı çalıştırıp, yaptığımız muhtemel hataları düzeltirsek, aşağıdaki tablo karşılaşırız.

 

 

 

 

 

 

Sonuç: Görüldüğü gibi, verilere ulaşma ile alakalı bir değişiklik yapacak olursak, kod’u veya oluşturduğumuz farklı bir katmanı baştan sona değiştirmek ve kodla oynamak zorunda değiliz. Enterprise Library çatısı altındaki bloklarda yaptığımız ayarlar bunları bizim yerimize yapıyor iken, biz daha çok kod’un “business logic” kısmı ile yoğunlaşarak ilgilenebiliriz.

 

 

Microsoft’un 2005’te ikinci sürümünü çıkardığı Enterprise Library’nin zamanla çok daha yaygınlık kazanacak ve Uygumala Geliştiricilerin işini çok kolaylaştırıcaktır.

 

 

Bir sonraki konu: DAAB’ı daha ileri uygulamaları ve detaylı incelenmesi.

 

Serdar Temiz

 

serdartemiz@yahoo.com

 

 

 

.