Makale Özeti

Bu makalede Enterprise Library ile ilgili giriş bilgileri ve Enterprise Library içindeki Data Access Application Block kullanılarak nasıl veri erişimi sağlanabileceğine dair bilgiler bulacaksınız.

Makale

2002’de ilk Application Block’ları yayınlayan Microsoft bunları geliştirerek Ocak 2005’de yazılımcılara uygulama geliştirme aşamasında kolaylıklar sağlayan Enterprise Library’i yayınladı.  Enterprise Library ile daha önce DAAB (Data Access Application Block) veya EMAB (Exception Management Application Block) gibi bağımsız  olarak geliştirilen bloklara belirli bir standardizasyon ve birlik getirildi.  Enterprise uygulama geliştirme yapılarına en uygun örneklerden biri olarak gösterilen Enterprise Library aslında .NET projelerinden oluşur.  Bu projeler Enterprise Library içindeki Application Block’ları temsil eder.  Projelerin kodları açık olduğundan herhangi bir Application Block’u  istediğiniz gibi modifiye edebilir veya gerekirse yeni bir blok ekleyebilirsiniz.

 

Enterprise Library içinde 7 temel Application Block  vardır:

 

·          Caching Application Block:  Uygulamalarda caching özelliklerini ayarlamayı ve yönetimini kolaylaştırmayı sağlar.

·          Configuration Application Block: Uygulamanın yapılandırma özelliklerini belirli bir kaynaktan okumayı ve yazmayı sağlar.

·          Data Access Application Block:  Uygulamada strandart veri kaynaklarının kullanımını kolaylaştırmayı sağlar.

·          Cryptography Application Block:  Uygulamaya şifreleme özelliği kazandırmayı sağlar.

·          Exception Handling Application Block:  Uygulamanın katmanlarında oluşan hataların tutarlı yönetimini sağlar.

·          Logging and Instrumentation Application Block:  Uygulamada belirli bir loglama stratejisi oluşturmaya yarar.

·          Security Application Block:  Uygulamaya yetkilendirme, izin verme veya kullanıcı bilgilerini alma özelliklerini kazandırmayı sağlar.

 

İstenen bloklar uygulamaya eklenerek uygulamanın fonksiyonalitesi arttırılabilir.  Büyük projelerde tüm ekibin Enterprise Library’nin getirdiği standartlara uyarak projeyi geliştirmesini sağlar.

 

Enterprise Library’yi indirmek için bu sayfayı kullanabilirsiniz.  Enterprise Library’i kurduktan sonra doğru çalışması için Programlar menüsünde Microsoft Patterns & PracticesàEnterprise LibraryàInstall Services ‘a tıklamanız geremektedir.  Böylece Enterprise Library’e ait performans sayaçlarını eklemiş olursunuz.

 

Son olarak Enterprise Library’nin kullanımının kodlama açısından getirdiği kolaylıkları incelemek için basit bir örnek uygulama yapalım.  Bunun için bir ASP .NET uygulaması açın ve WebForm1.aspx’e bir buton ve bir DataGrid ekleyin.  Uygulama, butona tıklandığında belirli bir tablodaki tüm bilgileri DataGrid’de gösterecek.  Bu uygulamayı ADO .NET ile geliştirirsek butonun click olayına şu kodları yazmamız gerekir:

 

DataSet ds=new DataSet("Customers");

 

SqlConnection conn=new SqlConnection("server=.;integrated security=sspi; database=northwind");

SqlCommand cmd=new SqlCommand("select * from customers",conn);

SqlDataAdapter da=new SqlDataAdapter(cmd);

da.Fill(ds);

 

DataGrid1.DataSource=ds.Tables[0];

DataGrid1.DataBind();

 

Aynı işi Enterprise Library ile yapmak için önce projeye Data Access Application Block’u eklememiz gerekiyor.  Programlar menüsünden Microsoft Patterns & PracticesàEnterprise LibraryàEnterprise Library Configuration ‘a tıklayın.  Açılan konsolda FileàOpen Application’ı tıkladıktan sonra açılan pencerede projenizin web.config dosyasını seçin. 

 

 

 

Application’ın Name özelliğine tercihen proje adına yakın bir isim verin.  Daha sonra uygulama üzerinde sağ tıklayarak NewàData Access Application Block’u seçin.

 

 

Böylece uygulamaya Data Access Application Block’u eklemiş olursunuz.

 

 

Bunun yanında Configuration Application Block da otomatik olarak eklenir.  Application Block’lar aslında uygulamanıza bazı yapılandırma dosyaları eklerler.  Her blokla ilgili ayrı bir dosya vardır.  Örneğin  veriye ulaşmak için dataconfiguration.config veya hata yönetimi için exceptionhandlingconfiguration.config dosyası eklenir.  Tüm bu dosyalar yapılandırma özelliklerini sakladıklarından uygulama onlara ulaşmak için otomatik olarak oluşturulan Configuration Application Block’u kullanır.

 

Şimdi tıpkı ADO .NET’te yaptığımız gibi veriye ulaşmak için kullanacağımız bağlantıyı tanımlayacağız.  Yanlız bunu kodla değil Application Block’u kullanarak yapacağız.

 

Data Access Application Block’un altında Connection Strings bölümü uygulama içinde kullanacağımız bağlantıları gruplar.  Varsayılan olarak bir SQL Connection tanımlıdır.  Bunu değiştirebilir veya isterseniz yeni bir tane tanımlayabilirsiniz. Yeni bağlantı tanımlamak için Connection Strings üzerinde sağ tıklayıp ve açılan menüde NewàConnection String’i seçebilirsiniz.  Önce Connection String’e tıklayıp Name özelliğine “SQL Bağlantısı” yazın.  Daha sonra bu bağlantının özelliklerini ayarlamak gerekiyor.  Örneğin bir SQL bağlantı cümlesinde database, server ve eğer Windows yetkilendirmesi yapılacaksa Integrated Security özellikleri bulunmalıdır.  Server özelliğine tıkladıktan sonra sağ tarafta açılan pencerede Value özelliğine kullanacağınız SQL Server’ın adını yazın.

 

 

Database özelliğine Value olarak Northwind atayın.  Eğer Integrated Security kullanarak bağlanmak istemiyorsanız bu özellik üzerinde sağ tıklayarak açılan menüde Remove’u seçin.  Bu durumda bağlantın için bir kullanıcı adı ve parola tanımlamamız gerekecek.

 

SQL Bağlantısı üzerinde sağ tıklayarak NewàParameter’ı seçin. Name özelliğine “uid” yazın.  Value özelliğine ise SQL Server’da tanımlı bir kullanıcının adını yazın.

 

 

 

Şifre tanımlaması için yine SQL Bağlantısı üzerinde sağ tıkladıktan sonra NewàPassword Parameter’ı seçin.  Name özelliğine “pwd” atadıktan sonra MaskedValue özelliğine kullanıcının şifresini atayın.

 

 

Böylece bağlantıyı tanımamış oluyoruz.  Connection Strings bölümünde istediğimiz kadar bağlantı tanımlayabiliriz ve bu bağlantıların özelliklerini doğru atadığımız sürece pek çok veritabanına bağlanabiliriz.  Şimdi bir Database Instance üzerinde tıkladıktan sonra Name özelliğine bir değer atayın.  ConnectionStringNode özelliğini SQL Bağlantısı olarak atayın.

 

 

Veri erişimi için gerekli ayarları artık tamamlamış bulunuyoruz.  Şimdi File menüsünden Save Application’ı seçerek uygulama klasöründe ilgili yapılandırma dosyalarının oluşturulmasını sağlamalıyız.  Uygulamaya geri döndüğünüzde bazı dosyaların değiştirildiği ile ilgili bir uyarı mesajı alabilirsiniz.  Dosyaların oluşturulabilmesi için bu değişklikleri kabul etmelisiniz.  Projenizin Solution explorer penceresinde Show All Files butonuna tıkladığınızda projeye dataconfiguration.config dosyasının eklenmiş olduğunu göreceksiniz.

 

 

Artık kod yazma bölümüne geçebiliriz.  Enterprise Library’nin bloklarının her birinin aslında birer . NET projesi olduğunu daha çnce söylemiştim.  Bu projeler yapılandırma dosyalarını okurlar ve kodlama sırasında işimizi kolaylaştıracak bazı class’lar sunarlar.  Bu class’lara ulaşabilmek için ilgili Application Block’a ait projeyi uygulamaya referans göstermemiz gerekir.  Uygulamanız Solution Explorer penceresinde References’a sağ tıklayarak Add Refrence’ı seçin ve açılan pencerede Browse butonuna tıklayın.  C:\Program Files\Microsoft Enterprise Library\bin klasöründeki   Microsoft.Practices.EnterpriseLibrary.Data.dll ve Microsoft.Practices.EnterpriseLibrary.Configuration.dll dosyalarını ekleyin.  Şimdi WebForm1’in codebehind’ına şu namespace’i ekleyelim:

 

using Microsoft.Practices.EnterpriseLibrary.Data;

 

Sayfaya ikinci bir buton ekledikten sonra bu butonun click olayına geçin ve aşağıdaki kodu yazın:

 

DataSet ds=new DataSet("Customers");

 

Database db=DatabaseFactory.CreateDatabase("ReadOnlyNorthwind");

ds=db.ExecuteDataSet(CommandType.Text,"select * from customers");

 

DataGrid1.DataSource=ds.Tables[0];

DataGrid1.DataBind();

 

Görüldüğü gibi veriye ulaşmak için kullandığımız kod oldukça azaldı.  Aslında tüm kodu aşağıdaki gibi de ifade edebiliriz:

 

DataGrid1.DataSource=DatabaseFactory.CreateDatabase("ReadOnlyNorthwind").ExecuteDataSet(CommandType.Text,"select * from customers").Tables[0];

 

DataGrid1.DataBind();

 

Bu kodlarla aslında ilk önce bir veritabanı tanımlıyoruz, arkasından veritabanı üzerinde istediğim sorguyu yürütüyoruz.  Aslında veritabanının tipi veya bağlantı özellikleri ile ilgili herhangi bir bilgi vermedik.  Tüm bu bilgiler dataconfiguration.config dosyasından geliyor.  Kısacası kodu bir kere hazırladıktan sonra bu sorguları destekleyen herhangi bir veritabanını kullanabiliriz.  Başka bir örneği de DataReader ile verelim:

 

IDataReader dr = DatabaseFactory.CreateDatabase("ReadOnlyNorthwind").ExecuteReader(CommandType.Text,"select CustomerID from customers");

while(dr.Read())

{

      Response.Write(dr[0].ToString() + "-");

}

 

Yine DataReader için de OleDB veya SQL gibi bir provider tipi belirtmedim.  Görüldüğü gibi belirli sorgu tiplerini destekleyen veritabanları için kodda herhangi bir değişklik yapmak gerekmiyor.  Ayrıca sorgulara parametreler eklenerek fonksiyonalitenin arttırılabilmesine de izin veriyor. 

 

Son olarak SQL Server’ın Northwind veritabanında bulunan “Employee Sales by Country” strored procedure’ünü çalıştıralım.  “Employee Sales by Country” tarih tipinde iki parametre alır ve bir rowset gönderir.  Sonucu DataGrid’de göstermek için:

 

DataGrid1.DataSource=DatabaseFactory.CreateDatabase("readOnlyNorthwind").ExecuteDataSet("Employee Sales by Country", new object [] {"01.01.1996" , "01.01.1997"});

 

DataGrid1.DataBind();

 

Tabiiki önemli olan yazdığımız kod satırını azaltmak değil ancak Enterprise Library uygulama genelinde yazılan kodlarda belirli bir stratejinin izlenebilmesini sağlar. Ayrıca eklediği performans sayaçları kullanılarak uygulamanın veri erişimi performans mönitörü aracılığıyla izlenebilir.