Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

MS Enterprise Library ile Loglama

Kurumsal uygulamaların bir çoğunda bir loglama sistemi kullanılır. Loglama nedir ne için kullanılır önce onu açıklayalım. Uygulamanın istenildiği şekilde çalışmadığı durumları kayıt altına alabilmek ve bu yönde hangi tarihte ne tür bir hata alınmış tespit edebilmek için kullanılır diyebiliriz kabaca. Loglama yazılımda olmazsa olmazlarındandır. Hangi kullanıcı ne zaman, hangi hatayı niye almış loglardan bularak ilgili çözümü bulmamız kolaylaşıyor. Microsoft bize bu konuda da çok güzel bir çözüm sunuyor. Daha önceki makalelerimizde bahsettiğimiz Enterprise Library içerisinde bulunan Logging Application Block sayesinde loglama işlemlerini kolayca yapabiliyoruz. Piyasada bedava başka loglama uygulamaları da mevcut : Log4Net , NSpring vs.

Loglama nasıl olabilir.

1-) En basit yöntemiyle karşılaşın hata veya izlenmek istenen olay fiziksel olarak bir text dosyaya kaydedilebilir.
2-) Event Loglara yazılabilir
3-) Bazı durumlarda mail atılabilir.
4-) XML e yazılabilir
5-) Veritabanına yazılabilir.
6-)Bir mesaj kuyruğuna yazılabilir.

Örnekleri çoğaltmak mümkün.Yapısına bakacak olursak :
Dd140109.2c05e81a-aadb-4884-81f8-384fc31dd2dd(en-us,MSDN.10).png

 

Kaynaklar

http://www.codeproject.com/KB/architecture/GetLoggingWithEntLib.aspx
http://msdn.microsoft.com/en-us/library/dd140109.aspx

Mart 6, 2010 Posted by | Yazılım | , , , | Yorum bırakın

Microsoft Data Access Application Block Çoklu Veritabanı Örneği

Microsoft Enterprise Library’e bir önceki makalemizde kısa bir giriş yapmıştık, bu makalede ise farklı veritabanlarına dinamik olarak erişim sağlamak adına Enterprise Library içerisindeki Data Access Application’u nasıl kullanabileceğimize bakacağız.

DAAB Enterprise Library içindeki projelerden bir tanesidir ve veritabanı işlemleri için özelleştirilmiştir. Bu yapacağımız uygulamada ben de kurulu olan SQL Express ve Access 2003 veritabanlarına kolayca nasıl erişebileceğimizi göreceğiz.

1-) MS Enterprise Library kurulur ve derlenir. Derlendikten sonra DLL’leri bin klasörü altında oluşur.

2-)Yeni bir windows uygulaması oluşturun ve Add Reference diyip aşağıdaki EL içerisindeki dll’leri projenize ekleyin.
Microsoft.Practices.EnterpriseLibrary.Common.dll , Microsoft.Practices.EnterpriseLibrary.Data.dll

3-)App.config dosyasını aşağıdaki gibi ayarlamamız gerekiyor.Burada section name yazan kısmı Enterprise Library Configuration aracını kullandırarak otomatik olarak eklettim. Enterprise Library’i eğer kurduysanız programların içerisinde bu aracı bulabilirsiniz.Kullanımı da gayet kolay sadece Open Application diyip yeni oluşturduğumuz uygulamanın app.config dosyasını seçiyoruz.
dataConfiguration sekmesinde varsayılan veritabanımızı seçiyoruz ve connection strings sekmesine de veritabanlarınız neyse onların connection stringini veriyorsunuz.İstediğniz kadar connection string eklemekte özgürsünüz..NET Provider’ı olan her bir veritabanına sorunsuzca bağlanabilirsiniz. Burada önemli bir nokta providerName mutlaka olmalı.

Enterprise Library AppConfig

4-) Windwos formunuza 3 adet buton ve bir grid bağlıyorsunuz. Benim projeme göre bu butonlardan birincisi SqlConnection seçilerek , ikincisi AccessConnection seçilerek , üçüncüsü ise varsayılan veritabanına bağlanacak.Kodlar aşağıdaki gibi.

Kodlar

 

Sonuç

Her bir butona tıkladığımızda ConfigurationManager ile app.config dosyasını okuma zahmetine dahi katlanmadan aynı form içerisinde hem access hem de sql express veritabanına bağlanabildik.Bu bize büyük bir esneklik kazandırıyor.

Herkese iyi çalışmalar.
tweet Paylaş

Kategori: (Yazılım) :: Yorum (0) :: Arkadaşına Gönder! :: Etiketler : microsoft,enterprise library,data access application block,çoklu veritabanı,

Mart 6, 2010 Posted by | C# | , , , | Yorum bırakın

Microsoft Enterprise Library’e Giriş

Microsoft’un Patterns and Practices grubu tarafından açık kaynak kodlu olarak piyasaya sürdüğü Enterprise Library programcılara gerçekten bir yol
haritası çiziyor. Bu makalemizde kısaca Enterprise Library nedir , ne değildir , projelerimizde nasıl kullanabiliriz bunlara kısaca giriş yapacağız.

Enterprise Library ne işe yarıyor önce ona değinelim. Büyük projelerde bulunan arkadaşlar eminim ki her projede bazı standart işlemlerin yapıldığını
ve kodlama maliyetini azaltmak için firmaların kendi frameworklerini geliştirme çabasında olduğuna şahit olmuşlardır.Her projede bir loglama , exception handling , şifreleme , veri erişim katmanı mutlaka vardır tabi amatörce yazılmamış bir proje değil ise.Sağolsun Microsoft’taki arkadaşlar güzel bir
framework yazmışlar. Bize düşen sadece projemize referans verip kullanmak. Ancak tavsiyem sadece kullanmakla yetinmeyin kodlarını da inceleyin çok faydalı olacaktır.
Bu makaleyi yazarken en son 2008’in Ekim ayında 4.1 sürümü piyasayadaydı.Aşağıdaki linkten Enterprise Library’i indirebilip bilgisayarınıza kurabilirsiniz.
http://www.microsoft.com/downloads/details.aspx?FamilyId=1643758B-2986-47F7-B529-3E41584B6CE5&displaylang=en
Enterprise Library 7 bloktan ve 42 projeden oluşuyor.Bunlar :

  • Caching Application Block
  • Configuration Application Block
  • Cryptography Application Block
  • Data Access Application Block
  • Exception Handling Application Block
  • Logging and Instrumentation Application Block
  • Security Application Block
 

Örneğin bir uygulamada loglamaya ihtiyaç duyduğunuzda bunu Logging and Instramentation Application bloğunu kullanarak rahatlıkla ister Event loglara isterseniz de bir text dosyasına yazdırabilirsiniz. Bunlar tamamen sizin uygulamanızdan bağımsız olduğu için projeniz hem daha sade bir yapıya kavuşur hem de daha stabil hale gelir.

Enterprise Library Configuration Tool sayesinde uygulamalarımızın config dosyalarını kolaylıkla yönetebiliriz. Ayrıca connectionlar da DAAB(Data Access Application Block) tarafından otomatik olarak açılır ve kapanır.Sürekli conn.Open veya conn.Close deme zahmetimiz de ortadan kalkıyor. Ayrıca Sql serverdan farklı veritabanları için de projenize provider ekleyebilirsiniz.

Kısaca bu makalemizde Microsoft Enterprise library’e giriş yaptık. Bir sonraki makalemizde

Kaynaklar :
http://msdn.microsoft.com/en-us/magazine/cc163766.aspx
http://www.codeproject.com/KB/architecture/MS-EntLib-DataAccess1.aspx

Mart 4, 2010 Posted by | Yazılım | , , , , | Yorum bırakın

Katmanlı Mimariye Giriş

Bu makalemizde katmanlı mimariye kısa bir giriş yapacağız.
Birçok uygulamada iki katmanlı ve bol dataset görmekteyiz. Bu formumuz veya sayfamızdaki gridleri doldurmak için oldukça kullanışlı bir yöntem.
Genellikle uygulamalar bu tarzda ve iki katmanlı yazılıyor. Ancak büyük projeler için bu bahsettiğimiz yöntem yerini 2 den daha fazla katmanın yer aldığı
veri erişim (Data Layer) , iş (Business Layer) ve sunum (Presentation Layer) olmak üzere temelde 3 katmandan oluşuyor ve datasetlerimizin yerini sınıflar alıyor.
Dataset kullanmak işi basite indirir ancak ihtiyaçlar arttıkça aynı kodu tekrar tekrar yazmak programcıyı sıkacaktır. Çünkü düşünün ki bir kontrolü çok yerde kullanıyorsanız projenizde defalarca onu doldurmak hem zaman , hem de iş gücü kaybı olacaktır.
Genel olarak nesne yönelimli programlar 3 veya daha fazla katmandan oluşur demiştik. Burada data,iş ve sunum katmanın dışında ekstra katmanlar da yer alabiliyor. Bileşenler için bir katman , harici DLL ler için bir katman , Exe’ler için bir katman. Bütün katmanlar fiziksel olarak aynı makine üzerinde çalışabileceği gibi farklı makinelere de dağıtmak mümkün.
Uygulamayı katmanlara ayırırken anahtar noktamız değişebileceğini tahmin ettiğiniz kodları birbirinden ayırmak olmalıdır ilk etapta.Böylece mevcut kodu değiştirmeden geliştirme yapmaya olanak sağlamış oluruz.Ayrıca tekrarlanan kod daha fazla hataya sebep olur.

Olası katmanların neler olabileceğine bir bakalım.

Database : Tablo,view,stored prosedürler ve triggerlar diyebiliriz.
Data Access Tier : Veritabanına erişim sağlayan , bağlantıları yöneten kodların bulunduğu katmandır.
ORM : SQL den nesneye veya nesne den SQL e çevirme işlemi yapar , genellikle code generation ile yapılır.
Business Domain Objects : Genellikle property’ler bulunur ve ilişkisel bir mantıkta tasarlanır.
Service Layer : İş akışını yönetir.
Controller Logic : User Interface ile alakalı olmayan mantıksal yapıyı User Interface den ayırmaya sağlar. Bu ayırma işlemini MVC framework te de görebiliyoruz.
UI/View : Kullanıcını etkileşim içinde olduğu katmandır

Aşağıdaki bazı nesnelerin ve kodların hangi katmanda bulunması gerektiğine dair bir tablo var.

 

Örnek Nerede Bulunmalı
SQL Server, Oracle, MS Access Database, DBMS
stored procedure Eğer mantıksal ise Business Domain Object, değilse Database
ASP page UI ve Controller
ASPX page UI
ASPX page code-behind Controller
Response.Redirect Controller
Windows Form UI
Windows Form code-behind Controller
Address class Business domain object
conn=new OleDBConnection;
conn.Open;
Data Access Tier
myAddress.Street = Reader.GetString(3)

veya

cmd.AddParameter(myAddress.Street)
O/R Mapping
using (DBConn conn = ConnFactory.Create())
{
   conn.Save(address);
   client.AddressId = address.Id;
   conn.Save(client);
}
Business Domain

Yukarıdaki listede ilginç olan ASPX sayfaları UI ve Controller’ın birleşiminden oluşuyor.
Diğer ilginç bir nokta ise stored prosedür mantıksal bir işlem yapıyorsa bu onun Business Logic te olduğunu bize gösteriyor.

Şimdi katmanlı mimarilerde olması gereken olmazsa olmaz bazı noktalara değinelim.

1. Validasyon
Çok katmanlı yapılarda validasyon yapan kodların tekrarlanmaması çok önemlidir. Kullanıcı butona bastığında , controller nesneleri veya service katmanı veriye ihtiyaç duyduğunda , veritabanına kayıt girileceği zaman vs. bir çok yerde validasyona ihtiyaç duyarız. Validasyon yapmadığımız veya validasyon kodunu tekrarladığımızda yanlış veri elde etme şansımız artar.Validasyonu 3 farklı şekilde yapabiliriz:
– Validasyon için ayrı bir bileşen geliştirmeli , hem windows hem de web formları aynı bileşeni kullanarak validasyon işlemini gerçekleştirebilmelidirler.
– Validasyon Business nesnelerine veya controller a koyulmalı ve herhangi bir programcının kodu yazarken bu validasyonları bypass etmesi engellenmelidir.
– Validasyonu veritabanı veya UI ‘ye koymak.
hangi yöntemi kullanırsanız kullanın sıfır kod tekrarına erişmek pek te kolay değildir.

2. Güvenlik Problemleri (Security)
– Menüleri veya butonları kullanıya göre enable disable etmek.
– Business layerde kullanıcı bazlı sınırlama koymak örneğin sadece kendi girdiği verileri güncellemesi gibi.
– Veritabanına kısıtlar (constraints) koymak veya prosedür de yetkiyi kontrol ettirmek

3. MVC kullanmak
MVC contoller mantığı ile UI i ayırmak için oldukça etkili bir yöntemdir.Genellikle karmaşık ve iş akışı odaklı yapılarda kullanılır.

4. Transactions
Bir işlem yarım kaldığında onun geri alınması olayı (rollback).Bu genellikle Controller veya Service Layer da bulunur.

5. Yeniden Kullanımı Sağlamak (Re-use)
Şirket bazında sık kullanılan kontrollerin birer bileşen haline getirilip tekrardan kullanımı sağlanmalıdır. Örneğin çalışmakta olduğum şirkette müşteri bilgileri gerekli olduğunda tekrardan veritabanına erişen kodu yazıp bununla vakit kaybetmiyorum , hazır olan bileşeni ekleyip , iş mantığına konsantre olabiliyorum.

Microsoft’un open-source olarak piyasaya sürmüş olduğu Application Blok gibi bir framework kullanmak hem standartlaşmayı sağlar hem de asıl odaklanmamız gereken konulara daha fazla vakit ayırmamızı sağlar.Ancak sadece SQL odaklı olduğu için kimi zaman ihtiyaçlara cevap veremeyebilir.

Bence en güzeli kendi frameworkümüzü yazmak. Tabiki zor ancak ihtiyaçlarımıza en iyi cevabı verecek kod  da kendi yazdığımız koddur.

Umarım yararlı olmuştur.Herkese iyi çalışmalar.

Mart 1, 2010 Posted by | Yazılım | , , , , | Yorum bırakın