Makale Özeti

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.

Makale

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 int MusteriNo { get; set; }

public string ZiyaretTipi { get; set; }

public string MusteriAdi { get; set; }

public string Telefon { get; set; }

public string GeriDonus { 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 bool ZiyaretKaydi(int MusteriNo)

{

return false; //Daha önce ziyaret kaydı yapılmadığını kabul ediyoruz.

}

public bool VeriGirisIzni(int KullaniciNo)

{

return true; //Kullanıcının veri giriş izni var kabul ediyoruz.

}

public bool GecerliTelefonBilgisi(string Telefon)

{

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 bool KayitEkle(int KullaniciNo, Ziyaret z)

{

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 void ZiyaretGirisi(Ziyaret z, int KullaniciNo)

{

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.