Yazılımcının Günlüğü | YazilimGunlugu.Com
Arama
Makale Kategorileri
Üye Girişi
Şuanki online üyeler()
Aktif üye bulunmamaktadır.


Facade Tasarım Deseni

Yazar: Nazım

Kategori: Yazılım Mimarisi

Eklenme Tarihi: 10.05.2009 10:45:50

Bu yazımda sizlere Facade tasarım desenini anlatacağım. Daha çok nerelerde kullanıldığından , avantajlarından ve yapısından bahsedeceğiz. Aslında genellikle çok sık kullanılan bir tasarım desenidir fakat kullananlar bir tasarım deseni kullandığının farkında olmayabiliyorlar. Facade kelimesi ön yüz, cephe anlamındadır. Yani mevcut sisteme yeni bir görünüm kazandırır.
Bu yazımda sizlere Facade tasarım desenini anlatacağım. Daha çok nerelerde kullanıldığından , avantajlarından ve yapısından bahsedeceğiz.

Aslında genellikle çok sık kullanılan bir tasarım desenidir fakat kullananlar bir tasarım deseni kullandığının farkında olmayabiliyorlar. Facade kelimesi ön yüz, cephe anlamındadır. Yani mevcut sisteme yeni bir görünüm kazandırır.

Facade, projedeki çok sayıdaki sınıfları bir alt sınıf olarak kabul edip daha sade bir kullanım sunmayı amaçlar. Genelde belli başlı işleri yapmak için çok sayıda nesne oluşturup bunlar arasında ilişki kurarız. Dolayısıyla projede ilerlerken bi müddet sonra kopyala-yapıştırın önüne geçemiyoruz. Bu noktada Facade deseni sıklıkta kullandığımız sınıflar için bir arayüz sağlayıp bize kolaylık sağlayabilmektedir.

Birinin bir projeye sonradan dahil olması olasıdır. Dolayısıyla projeyi tanıması için büyük çaba gerekecektir. Halbuki projedeki tüm kütüphaneleri tanıyıp anlamasını beklemek yerine sadece onun ilgileneceği bir arayüz sunmak daha akıllıca olacaktır. Böylece projeye adapte sorunu kalmayacaktır.

Facade tasarım desenini oluşturmak için dikkat edilmesi gerekenler vardır. Öncelikle bu desenimizin karmaşık bir sisteme basit bir arayüz sunduğunu unutmamak gerekir.Facade tasarım desenini kullandıktan sonra daha az kod ile istediğimiz işi yapabiliyor olmamız gerekir. Facade desenimizi kullandığımız halde eskiye oranla gene aynı satırda kod yazıyorsak tasarımda yanlışlık var demektir.Bu tasarım deseni sisteme sadece yeni bir yüz katar.

Basit bir senaryo ile Facade tasarım desenini anlamaya çalışalım.

Senaryo( Satış destek ekibi için ziyaret girişi)

Satış destek ekibi için ziyaret girişi kurgusu ile yola çıkalım. Bunun için öncelikle ziyaret sınıfı hazırlamamız gerekecek. Bu sınıf içinde gerekli propertyleri hazırlamalıyız.

class
Ziyaret
{
    public intMusteriNo { get; set; } 
    public stringZiyaretTipi { get; set; } 
    public stringMusteriAdi { get; set; } 
    public stringTelefon { get; set; } 
    public stringGeriDonus { get; set; }
}

Bu ziyaret sınıfımızı hazırlayacağımız alt sınıflarda ve facade sınıfımızda kendi tipimiz olarak kullanacağız. Şimdi uygulamayı kullanacak olan kişiden alacağımız verileri kontrol etmemiz gerekebilir. Örneğin. Telefon bilgisi doğrumu değilmi, bu ziyaret daha önce yapılmışmı yapılmamışmı, kullanıcı için veri giriş izni varmı yokmu... Bunları arttırmak mümkün. Şimdilik bu saydıklarımızı içeren bir sınıf hazırlayabiliriz.

class
Kontrol
{
    public boolZiyaretKaydi(intMusteriNo) 
    {
        return false;
//Daha önce ziyaret kaydı yapılmadığını kabul ediyoruz. 
    } 

    public boolVeriGirisIzni(intKullaniciNo) 
    {
        return true;
//Kullanıcının veri giriş izni var kabul ediyoruz. 
    } 

    public boolGecerliTelefonBilgisi(stringTelefon) 
    {
        if(Telefon.Substring(0, 3) == "212" || Telefon.Substring(0, 3) == "216"
            return true
        else 
            return false
    }
}

Şimdi de veri girşini kaydedecek olan metodumuz için bir hazırlayacağız. Bu sınıfımızın adına Merkez diyorum. Merkez sınıfı içindeki metodumuz int tipinden ve ziyaret tipinden parametre alıp geriye bool değer döndürecek.

class
Merkez
{
    public boolKayitEkle(intKullaniciNo, Ziyaretz) 
    {
        return true
    }
}

Facade Sınıfımızı Oluşturuyoruz

Facade isimli bir sınıf içine kullanacağımız tüm alt sınıfları yazmalıyız. Daha sonra bunu yapıcı metotta örnekleyebiliriz.

private Kontrol _Kontrol;
private Merkez _Merkez;
public Facade()
{
        _Kontrol = new Kontrol(); 
        _Merkez = new Merkez();
}

Şimdi ziyaret kaydı için bir metot hazırlamamız gerekecek. Bu metot alt sınıftaki metotlarımızı kullanmak zorunda. Aksi taktirde bu sınıf sistemin olmazsa olmaz bir parçası olur.



public voidZiyaretGirisi(Ziyaretz, intKullaniciNo)
{
    if(_Kontrol.GecerliTelefonBilgisi(z.Telefon) && !_Kontrol.ZiyaretKaydi(z.MusteriNo) && _Kontrol.VeriGirisIzni(KullaniciNo))
    {
        _Merkez.KayitEkle(KullaniciNo, z);
        Console.WriteLine("Kayıt eklendi."); 
    }
    else 
        Console.WriteLine("Kayıt eklenemedi!");
}

Ziyaret tipinden ve int tipinden 2 parametre alan ve geriye bool değer döndüren metodumuzu yazıdık. Burada dikkat edeceğiniz gibi sadece alt sınıflarımızı kullandık. Böylece veri girişi için client kısımda facade sınıfımızı kullanmak için herşeyi tamamladık. Client tarafta facade nesnemizi oluşturup içindeki ZiyaretGirisi metodumuzun gerekli parametrelerini vereceğiz. Böylece verilerin kontrolü için client tarafta bir nesne kullanmamıza gerek kalmadı.

Sonuç

Facade mevcut bir projedeki sınıfların kullanımını kolaylaştırır. Bu tasarımın amacı sistemi yeni bir alt yapıya sokmak değildir. Alt sınıfları istemciden soyutlayarak pratiklik sunar.
Tema
Anket
Visual Studio 2010 Beta 2'yi denediniz mi?


En Çok Okunan Makaleler
En Son Eklenen Makaleler
Soru Merkezinde Bekleyenler
Ana Sayfa | Hakkımızda | Editörler | Yazarlar | RSS RSS | İletişim
Yazılım Günlüğü 2007-2009 © Tüm Hakları Saklıdır.