Facade Design Pattern


Sık kullanılan tasarım desenlerinden birisidir.Yazıda en basit şekliyle "facade" design pattern'dan bahsetmeye çalışacağım.Belki kod yazarken farkında olmadan kullanmakta olduğunuz bir kalıptır.

Kelime anlamı olarak "cephe,dış görünüş" olarak çevirebiliriz.Elimizdeki sınıfları ortak amaçlar için kullandığımız durumları düşünelim.Her class'a yeniden ulaşmak yerine bu class'ları bir cephede toplayıp erişimi kolaylaştırmayı amaçlar.Kısaca birden fazla nesneyi karmaşık bir işlem için kullanmanız gerekiyorsa, bir facade sınıfı yazarak nesneleri bir araya getirip otomatik olarak çağıran bir yapı işimizi kolaylaştıracaktır.Örneğin kullandığımız teknolojilere bakarsak, Web API veya Web servisteki client tarafından erişilebilen yapılarda da facade tasarımını görmek mümkündür.

Örnek bir senaryomuz olsun:

  • İstanbulkart'lar için 2 adet üyelik modülümüz bulunsun.
  • Sistem2'ye üyelik için kartın Sistem1'de kara listede olup olmadığına bakılsın, kartID'si eşleşiyorsa üye olunabilsin.
Basit bir şekilde class diyagramıyla görmek daha kolay olabilir:



public class Sistem1Kontrol
{
    public bool KaraListeKontrol(string kartID)
    {
        //kontrol edildiğini varsayalım
        return false;
    }
}

public class Sistem2Islemler
{
    public void UyeEkle(string kartID)
    {
        Console.WriteLine("{0} Üye Eklendi",kartID);
    }
}

public class IDKontrol
{
    public bool Kontrol(string kartID)
    {
        //kontrol edildiğini varsayalım
        return true;
    }
}

public class Facade
{
    //constructor da oluşturulabilir
    
    IDKontrol Id = new IDKontrol();
    Sistem1Kontrol Sistem1 = new Sistem1Kontrol();
    Sistem2Islemler Sistem2 = new Sistem2Islemler();

    public void Sistem2UyeEkle(string kartID)
    {
        if (Id.Kontrol(kartID) && !Sistem1.KaraListeKontrol(kartID))
        {
            Sistem2.UyeEkle(kartID);
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        Facade f = new Facade();
        f.Sistem2UyeEkle("12345678");
        Console.ReadKey();
    }
}

Bu şekilde program çalıştığında client bu sınıfları direkt kullanmayıp Facade sınıfı üzerinden kullanmış olacak.Basit bir anlatımla açıklamaya çalıştım.

iyi çalışmalar :)

Bu blogdaki popüler yayınlar

Qad Kafani İlmu Rabbi

YAZILIM MİMARİSİ ve TASARIM DESENLERİ (Software Architecture and Design Patterns)