|
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.
Nazım
|