16 Kasım 2012 Cuma

Design Patterns - Adapter Pattern

Merhaba arkadaşlar,
 
Tasarım desenleri konumuza kaldığımız yerden devam ediyoruz. Bu yazımızda anlatacağımız konumuz adaptör deseni(Adapter Pattern) olarak geçiyor.



Konumuza geçmeden önce bir önceki yazımızı hatırlayalım.

Bir önceki yazımızda Abstract Factory Pattern incelemiştir. Bu desen bize seri nesne üretim yapan fabrikaları üreten üst bir yapıdan bahseder.
 
Konumuza dönersek Adaptör Tasarım ismi insana bir fikir verdiğini düşünüyorum. Adaptörler ne iş yapar diye düşünürsek, sisteme dışarıdan gelen girişleri sistemin anlayacağı şekile dönüştürür. Bu bize ne gibi kolaylık sağlar ? Sisteme girişlerinin standart olması sayesinde adaptörlerin değiştirilebilmesine imkan tanır.
 
Gerçek hayatta buna pek çok örnek var. Bilgisayar şarz cihazları, post cihazları, iett akbil basma cihazı gb.
 
Yazılım da örnek verelim. Hazır kütüphaneleri sistem de kullanırken, kütüphanelere bağımlı kalınmaması için araya adaptörler yazılabilir. Bugünkü örneğimiz de buna uygun şekilde yapalım. Loglama işlemi yapan hazır kütüphane ve kendi loglama mekanizmamızı sistemimize dahil etmeye çalışalım.
 
Uml diagramımıza bakalım.


Uygulamamız da 2 adet loglama yapan sınıf vardır. Bunlardan bir tanesi kendi yazdığımız Mylogger  sınıfımız ve diğeri ise Log4Net kütüphanesidir.

Uygulamamızın kodlarına bakacak olursak;

Adaptör Arayüzü
Log4Net Adaptörü
Kendi Log Kaydetme Sınıfımız
 
Loglama işlemini çağıran sınıf
Log4Net konfigürasyonu app.config
Not: Log4Net konfigürasyonu için assembly.cs sınıfına
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
 satırını eklemeniz gerekmektedir. 
 
Yukarıdaki kodu incelersek prgram sınıfı önce kendi loglama mekanizmasını çağırarak loglama işlemini yapıyor. Daha sonra kullanmak istediği log4net loglama mekanizması için adaptörü kullanıyor.
 
Burada kod geliştirmek istesek başka ne yapılabilir diye düşündüğümüz de loglama mekanizmasını bir factory sınıfından alabiliriz. Bu şekilde üretme işlemini de sistemden soyutlamış oluruz.
 
Dikkat ettiyseniz eğer Log4Net'ten sistemimizi hala tam soyutlamadık. Program sınıfında ILog nesnesini static olarak tanımladık. Bu işlemi de fabrika sınıfında bir Dictionary koleksiyonu içinde tutabiliriz. Loglama işlemi için daha önce gelmeyen bir sınıfın ILog nesnesi oluşturulup koleksiyona ekleriz. Daha sonra gelen aynı sınıf loglama işlemleri için tekrar tekrar değişken tanımlamamıza gerek kalmaz.
 
Arkadaşlar yukarıdaki iki genişletme işlemini kendi sisteminizde deneyebilirsiniz. Bu şekilde pratik yapmış olursunuz(Yazılım dünyasında bir kodu anlamak ve unutmamak istiyorsak kesinlikle örneğini yapmalıyız :)).
 
Bir makalemizin daha sonuna geldik. Adaptör nesnesinin temel özelliği nedir diye sorarsak, bir sisteme monte edilecek farklı sistemler için arayüz oluşturmasıdır.
 
Yanlışlarımız varsa her zaman söylediğim gibi düzeltirseniz memnun olurum. Yazdıklarım bilmediklerimin yanında okyanusta damla gibi olduğunu biliyorum.
 
Okuyan gözlerine sağlık. Görüşmek üzere :)
 

2 yorum:

  1. yazılarınızın devamını bekliyoruz :)

    YanıtlaSil
  2. Çok sade ve başarılı bir yazı. Umarım devamı gelir.

    YanıtlaSil