ASP.NET
Network Akademi

Met Hostimg

“Bilgi paylaşıldıkça artar” sloganı ile .NET Platformuna ilişkin birikimlerin paylaşıldığı ASP.NET.TR Topluluğunda sizde “YAZAR” olmak için ; info@asp.net.tr e-mail adresine kendinizi anlatan bir e-mail göndererek başvuruda bulunabilirsiniz.

Design Patterns - Facade Design Pattern

Veysel Uğur KIZMAZ
Introduction
15.05.2011 11:37:06
Hit : 6114

 Bu makalemizde Facade Design Pattern nedir? Nerelerde kullanılır? Konularına değineceğiz.

O zaman sorularımıza başlayalım :)
 
Facade Pattern Nedir?
 
Facade Design Pattern, basitçe, sistemlerin kullanımını seviyelendirme işlemini gerçekleştirmektedir. Oluşturulan bir sistemde alt sistemler oluşturmaktadır. Sistem olarak bahsettiğimiz yapıyı class olarak düşünebiliriz. Alt sistemler ise bu sınıflar altına tanımlanmış olan sınıflardır diyebiliriz.
 
Kullanım sıklığı nasıl?
 
Facade Design Pattern’ı eminim birçoğunuz farkında olmadan kullanmışsınızdır. Bir örnekle Facade Pattern’ı incelediğimizde neden bu cümleyi kurduğumu anlayacaksınız.
 
Örnek:
 
Örneğimizde şu anda kullandığımız bilgisyarı inceleyelim. Bilgisayarın yaptığı temel işlemlerin bulunduğu bir sınıf oluşturalım. Bu işlemler: IslemciCalistir, IslemciJump, RAMOku,RAMYaz, HarddiskOku, HarddiskYaz methodları olsun.
 
  1. class Bilgisayar
  2. {
  3.     //İşlemci Fonksiyonları
  4.     public void IslemciCalistir() { }
  5.     public void IslemciJump(long adres) { }
  6.  
  7.     //RAM Fonksiyonları
  8.     public byte[] RAÖOku(long adres) { throw new Exception(); }
  9.     public void RAMYaz(long adres, byte[] veri) { }
  10.  
  11.     //Harddisk Fonksiyonları
  12.     public byte[] HarddiskOku(long adres) { throw new Exception(); }
  13.     public void HarddiskYaz(long adres, byte[] veri) { }
  14. }
Bu sınıfı incelediğimizde bütün methodların Bilgisyar sınıfında tanımlandığını ve bu tanımlamanın, işlemlerin sayısı arttıkça karmaşıklaşacağını tahmin edebilmekteyiz. Bunun yerine FacadeDesign Pattern kullanılarak yapımız alt sınıflara bölünmek suretiyle işlemlerimiz parçalanabilir, hem kontrolü hem kodun okunabilirliği açsıından avantaj sağlanabilmektedir.
 
Açıklama satırlarına işlemcinin yaptığı işlemleri, RAM’in yaptığı işlemleri ve harddiskin yaptığı işlemleri belirttik. İşlemci işlemlerini Islemci, RAM işlemlerini RAM,harddisk işlemlerini Harddisk sınıfına taşıyıp bu sınıfları Bilgisayar altında tanımlarsak Bilgisayar sınıfımızı alt sınıflara bölme işlemini gerçekleştirmiş olacağız.
 
  1. class Islemci
  2. {
  3.     public void Calistir() { }
  4.     public void Jump(long adres) { }
  5. }
  6. class RAM
  7. {
  8.     public byte[] Oku(long adres) { throw new Exception(); }
  9.     public void Yaz(long adres, byte[] veri) { }
  10. }
  11. class Harddisk
  12. {
  13.     public byte[] Oku(long adres) { throw new Exception(); }
  14.     public void Yaz(long adres, byte[] veri) { }
  15. }
 
 
Yukarıda Islemci, RAM ve Harddisk sınıflarını tanımladık. Şimdi Bilgisayar sınıfını tanımlayalım.
 
  1. class Bilgisayar
  2. {
  3.     public Islemci Islemci { getset; }
  4.     public RAM Ram { getset; }
  5.     public Harddisk Harddisk { getset; }
  6. }
 
Gördüğünüz üzere, Bilgisayar sınıfı altında Islemci, RAM ve harddisk sınıflarına özgü değişkenler oluşturduk. Bu yapı ile sınıfımızı karmaşıklıktan kurtarıp alt sınıflara (sistemlere) bölüp kodumuzun kontrolünü ve okunabilirliğini kolaylaştırmış olduk.
 
Bilgisayar sınıfımızın kullanımına bir örnek aşağıdaki gibi olacaktır.
 
  1. public void Deneme()
  2. {
  3.     Bilgisayar bilgisayar = new Bilgisayar();
  4.     //İşlemci işlemleri
  5.     bilgisayar.Islemci.Calistir();
  6.     bilgisayar.Islemci.Jump(1);
  7.    
  8.     //RAM işlemleri
  9.     bilgisayar.Ram.Oku(1);
  10.     bilgisayar.Ram.Yaz(1, null);
  11.  
  12.     //Harddisk İşlemleri           
  13.     bilgisayar.Harddisk.Oku(1);
  14.     bilgisayar.Harddisk.Yaz(1, null);
  15. }
Tekrar Facade Design Pattern tanımına dönecek olursak, aşağıdaki resim aslında bu patterni çok güzel anlatmaktadır. Facade sınıfında birçok sınıf türünden değişkenler vardır. Bu sınıflar da SubSystem adı altında alt sistemler (sınıflar) olarak tanımlanmış ve işlemler için bu sınıflar kullanılmaktadır.
 
Description: C:\Users\ugur\Desktop\facade.gif
 
 
 
Veysel Uğur KIZMAZ
 



BU İÇERİĞE YORUMDA BULUNUN


Bu MAKALE'ye yorum yapabilmek için Üye olmalısınız ...!


BU İÇERİĞE YAPILAN YORUMLAR