| 
                
             | 
        
        
            
                
                    
                        | 
                            Tasarım Kalıpları - 2, Facade | 
                        
                             | 
                                
                     
                    
                        
                            
	
    
		
            | Gönderiliyor lütfen bekleyin... |   
        
	 
    
 
                         | 
                     
                 
             | 
        
        
            
                
                
 Bu tasarım kalıbını, ismini bilmeden birçok 
kez uygulamış olduğunuzdan eminim.  
Tasarım kalıplarının ilk yazısında, tasarım kalıpları 
  hakkında genel bir bilgi vermeye çalıştık. Bundan sonraki yazılarımızda 
  örnek kalıpları anlatmaya devam edeceğiz.
  
Bu bölümde, çok sık kullanılan, çok 
  yaygın bir çözüm olan "Facade" kalıbı hakkında 
  bilgi vereceğiz. Facade, varolan bir sistemin üstüne daha yüksek 
  seviye bir arayüz tanımlayıp o sistemi kullanmamızı sağlar. Bu yüksek 
  seviyeli arayüz, sistemi daha kolay kullanmamızı sağlar.
  
Temel olarak, bir sistemin hepsini kullanmak yerine belirli 
  kısımlarının kullanılacağını düşünün. Bu durumda tüm fonksiyonları 
  sağlamak gereksiz olacaktır. Ayrıca geliştirme takımına sonradan katılan kisiler, 
  sistemi öğrenmek için aslında kullanılmayan bir sürü fonksiyon 
  ile de uğraşacaklardır. Facade ile, istenilen basitlik ve sadelikte bir arayüz 
  elde edilecektir.
  
Bu tasarım kalıbı aslında sadece yazılımlarda değil yaşamın 
  her evresinde kullanılmaktadır. Örneğin geliştirilecek bir sistem için 
  belirli bir sahada bilgiye sahip olunması gerekebilir. Mesela eczacılık ile 
  ilgili web tabanli bir alışveriş sitesi sistemi geliştirdiğinizi düşünün. 
  Bu durumda eczacılık ile ilgili bazı bilgilere ihtiyacınız olacaktır fakat tüm 
  bilgileri bilmek gereksiz olacaktır. Örneğin bir ilacın içerigini 
  bilmek sizin için gereksizken hangi ilaçlarin reçetesiz 
  satilabilecegi, hangi ilaçlarin vergi oranının ne kadar olacağını 
  bilmelisiniz. Bu durumda takımdan birini gerekli bilgileri öğrenmek için 
  ve size bunları sunması için görevlendirirseniz, eczacılık hakkındaki 
  tüm bilgileri tüm takımın öğrenmesi gerekmez, bu sorumlu kişi 
  gerekli noktaları belirler ve size sunar. Geliştirme takımı da sadece bunlara 
  bağlı kalarak sistemi geliştirir. Bu durum Facade tasarım kalıbına çok 
  güzel bir örnek teşkil etmektedir. Eczacılık sisteminin "tüm 
  hizmetlerini, fonksiyonlarını, kısıtlarını" bilmek yerine sizi ilgilendirecek 
  olan, eczacılık sisteminin "alt kümesini" bilmeniz işinizi 
  yapmaniza yardimci olacaktir. Sorumlu kisi, takim ile eczacilik sistemi arasinda 
  bir “arayüz” olacaktir ve eczacilik sistemini kullanmaniz kolaylasacaktir.
  
Yukaridaki örnegin aynisi, gelistirdiginiz kod sistemleri 
  için de tam olarak örtüsecektir. 
  
 
  
Yukaridaki sekilde de görülecegi gibi, A, B, C, D 
  sisteme direct olarak ulasmak yerine arayüz tarafindan onlara saglanan 
  fonksiyonlara ulasabilmektedirler. Bunun birçok yarari vardir:
  
1. Sistemin kullanimi kolaylasir 
  2. Arayüz sayesinde sistemin kontrolü kolaylasir 
  3. Gerektiginde kolaylikla yeni fonksiyonlar eklenebilir ve çikarilabilir 
  4. Bakimi kolaylastirir 
  5. Alt taraftaki karmasik sistemin anlasilmasi gerekmez
  
KÜNYE
  
Isim: FACADE 
  Amaç: Varolan bir sistemin kullanilmasini kolaylastirmak. 
  Kendi arayüzünüzü tanimlamak. 
  Problem: Varolan sistemi kullanma zorunlulgu, sistemin altkümesini 
  kullanma zorunlulugu 
  Çözüm: Yeni bir arayüz saglayarak bu 
  arayüz üzerinden kullanimin saglanmasi 
  Birimler: Özellesmis arayüz  
  Gerçeklestirim: Gereksinimleri karsilayacak seklilde 
  yeni bir arayüz tasarla, Bu arayüzün varolan sistemi kullanmasini 
  sagla
  
Örnegin, çalismakta olan bir eczane sistemi olsun, 
  bu sistemin siniflari basitçe asagidaki gibi olsun:
  
  
     
  
      class IlacSorgu {
  
      public: 
        IlacSorgu(String IlacAd); 
        BaglantiYap();
  
      }
  
      class IlacIstek {
  
      Public: 
        IlacIste(Integer IlacNo); 
        SiparisVer(Integer IlacNo); 
        SiparisIptal(Integer SiparisNo);
  
      }
  
      class Eczane {
  
      Public: 
        Baslat(); 
        EczaneKaydet(Integer EczNo); 
        SatisYap(); 
        String EczaneAdi;
  
      }
  
 
 
  | 
   
 
 
  
Yukaridaki sistemde, eczane ile ilgili çesitli isler yapmakta olan siniflar 
  mevcuttur. Simdi biz, tüm bu islemleri yapan sistemden, kendi sistemimiz 
  için gerekli olan islemleri yapacak olan bir “EczaneYonetim” 
  sinifi yaratabiliriz:
  
 
  
  
    
 
  
      Class EczaneYonetim {
  
      public: 
        SistemiBaslat(); 
        SatisYap();
  
      };
  
      EczaneYonetim::SistemiBaslat(String EczaneAdi) 
        { 
        Eczane::Baslat(); 
        Eczane::EczaneKaydet(EczAdi); 
        }
  
      EczaneYonetim::SatisYap(String IlacAd) 
        { 
        IlacSorgu::BaglantiYap(); 
        IlacSorgu::IlacSorgu(IlacAd); 
        IlacIstek::IlacIste(IlacAd); 
        IlacIstek::SiparisVer(IlacAd); 
        }
  
       
  
 | 
   
 
 Yukaridaki örnekte de gördügünüz gibi, 
  varolan bir sisteme arayüz yapilarak geliistirecegimiz sistemde kullanilacak 
  islemler, basitlestirildi. Bu “EczaneYonetimi” sinifi sayesinde 
  artik satis yapmak isteyen bir sinifin eczane ile ilgili diger sinifilari bilmesine 
  gerek kalmadi. Sadece “SatisYap” metdounu çagirarak bir satis 
  islemini yapabilmektedir. IlacSorgu, IlacIstek siniflarinin ne yaptigi ile hiçbir 
  bilgiye ihtiyaci yoktur. Hatta boyle siniflar oldugunu bile bilmesine gerek 
  yoktur. 
  
                
                Makale: 
                Tasarım Kalıpları - 2, Facade Yazılım Mühendisliği Tanıl Ergin 
             | 
        
        
            | 
             | 
        
        
            | 
                 
             | 
        
        
            
                
                
                    
                        - 
                            
                        
 
                        - 
                            
Eklenen Son 10  
                         
                        - 
                            
Bu Konuda Geçmiş 10 
                         
                     
                    
                        
                            Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
                         
                        
                            Son Eklenen 10 Makale Yükleniyor
                         
                        
                            Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
                         
                     
                 
                
                
             | 
        
        
            | 
                
             |