Facade Design Pattern
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();
}
}
{
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 :)
iyi çalışmalar :)