Selam millet!

Hiç düşündünüz mü; hayatımızda kullandığımız cihazların yaptığı işler gittikçe daha karmaşık bir hale geliyor. Fakat buna rağmen, kullanım şekilleri oldukça basitleşiyor. Bu durum, sanırım adı konulmamış bir mühendislik prensibi. Arkada yapılan iş ne kadar karmaşık olursa olsun, ürünün kullanımı basit olsun.

Mesela tam otomatik bir çamaşır makinesini ele alın. Kullanıcı, deterjan ve yumuşatıcı gibi malzemeleri hazırladıktan sonra çamaşır tipini seçer ve makineyi çalıştırır. Çamaşır makinasının bu noktadan sonra ne yapacağına kendisi karar verir. Değerleri ölçer, süreci yönetir ve hangi sırayla hangi işlemleri yapacağını bilir. Tüm bunları adı üzerinde “otomatik” bir biçimde yapar.

Peki, bizim geliştirdiğimiz yazılım uygulamalarında da aynı yaklaşım söz konusu olamaz mı? Birden fazla nesnenin kullanıldığı karmaşık bir işlemi, nesneleri bir araya getirerek “otomatik” bir biçimde çalıştıracak bir sınıf inşa edemez miyiz?

Tabii ki ederiz! Ve hatta eminim ki birçoğunuz, “e zaten ben yapıyorum ki” diye yanıtlamış bile olabilir bu soruyu. O zaman söyleyelim. Bu kullandığınız yöntem bir tasarım desenidir ve adı da Façade’dir.

Adını, Fransızca “cephe – ön yüz” anlamına gelen bir kelime bu arada Façade. Fransızcadan olduğu gibi İngilizceye de geçmiş. Kelimeyi dilbilimsel açıdan ele almayacağım tabi ama o “ç” harfinin gerçekten kelimede olduğunu belirtmek istedim.

Her neyse… Tahmin edeceğiniz gibi bu desen, uygulama geliştiriciler tarafından oldukça sık kullanılıyor. O halde biz de bir senaryo belirleyelim ve kod örneğimizi yazmaya girişelim.

Senaryomuz, bir e-ticaret uygulaması üzerinde sipariş algoritması olsun (Tamam biliyorum çok klişe ama basit ve anlaşılır ne yapayım). Kullanıcı sepetini oluşturduktan sonra ödeme ve kargo bilgilerini de girerek tek tuşla siparişini verir. Oysa bilen bilir arkada neler olduğunu!

  1. Bankaya gerekli bilgileri gönder ve onay al.
  2. Müşteri nesnesini oluştur.
  3. Seçilen kargo şirketini de nesne olarak oluştur.
  4. Oluşturulan siparişi veritabanına ekle ve yeni Sipariş id’sini bellekte tut.
  5. Yeni sipariş id’si ile satın alınan tüm ürünleri ilişkilendir ve veritabanına ekle.
  6. Satın alınan ürünlerin stoklarını güncelle.
  7. İşlemi tamamla.

Bu yedi adımın da farklı nesnelerin sorumluluğunda olduğunu düşünürsek, her sipariş verme işleminde bu adımları tekrar tekrar kurgulamak işimizi oldukça karmaşıklaştırır. Bunun yerine tüm bu adımları yerine getiren bir nesne inşa edebilirsiniz. İşte o nesneniz Façade olur!

Hadi önce modellerimizi oluşturalım:

 

Tamamdır. Şimdi de gerekli operasyonların sorumluluğunu üstlenecek business sınıfları gelsin:

 


Sipariş verme işlemi buradaki tüm business nesnelerini ve doğal olarak model nesnelerini bir arada kullanıyor. İşte bu karmaşık operasyonu, Sipariş Ver butonunun tıklanması çağırırsa bu oldukça işlevsiz bir sonuç doğuracak. O halde bu nesneleri organize eden bir Façade sınıfı yazalım.

 


Gördüğünüz gibi Façade sınıfının sadece gerekli metotları dışarıya açık. Yani istemci bu nesneye eriştiğinde, sadece gerekli parametreleri sağlayacak ve işlemi basite indirgemiş olacak. Tıpkı deterjan ve yumuşatıcıyı ayarlayıp makineyi çalıştırmak gibi… Yani örneğin Main metodundan aşağıda gözüktüğü gibi nesnemi çağırabilirim:

 

Tabii ki çıktıya da göz atalım:

Evet. Kod örneğimizi de tamamladık arkadaşlar. Ancak yazıyı tamamlamadan önce, vurgulanması gereken bir şey var. Façade tasarım deseni, bu haliyle bile birçok farklı teknolojiye ilham vermiş bir desen. Örneğin, bir Web API ya da bir Web Servisi içinde yer alan ve istemci tarafından erişilebilen sınıflar da aynı buradaki SiparisFacade sınıfı gibi, karmaşık işlemleri düzenleyen yapılar değil mi? Yani, öyle altyapılar inşa ediyoruz ki günümüzde; istemciler, yalnızca gerekli metotlara erişip talep-yanıt (request – response) yapısı ile tüm sistemi ayağa kaldırabiliyorlar.

Buradan da görebileceğimiz gibi dostlar, bir probleme geliştirdiğiniz basit ve etkili bir çözüm, aslında başka yönelimlere de ilham olabiliyor. Dolayısıyla bu durum da çözüm odaklı olmanın bir getirisi gibi duyuruyor.

Velhasıl, en sık kullanılan Façade tasarım desenini de böylece sizlere aktarmış oluyorum.

Bir sonraki yazıda görüşmek ümidiyle, hoşça kalın.

 

Leave a Reply