Merhabalar.
Bu yazımda sizlere, yapısal tasarım desenlerinden biri olan, facade desing pattern'den bahsedeceğim. Bu desenin kullanım amacı, istemcilerin sistemimizin alt parçaları olan sınıflar, servisler veya metodlarla direkt olarak ilişkiye geçmelerini engellemektir. Bu desenin tasarımı şu şekildedir.

Sistemimizin alt parçaları, istemcilerin doğrudan kullanımına kapalıdır. İstemci ve alt sistemlerin ilişkisi başka bir katman (facade) tarafından yönetilmektedir. Böylelikle sistem güvenliği artırılmakla beraber, kullanım kolaylığı da artmaktadır. Sistem alt parçaları, tamamen birbirinden bağımsız olduğundan dolayı, her parça bu sistemden alınıp, başka sistemlere kolayca iplemente edilebilmektedir. Hatta bir alt sistem öğesi, birden fazla facade tarafından da kullanılabilme imkanına sahiptir. Facade katmanı sistem için yararlı olmasına rağmen, zorunlu değildir. Çünkü facade, sistemde asıl işi yapan katman değil, asıl işi yapan katman ile kullanıcı arasında çalışan bir ara katmandır. Her bir alt sistem, kendi içerisinde başarıyla çalışmaktadır. Bu nedenle, facade katmanı sistemden çıkarıldığında, alt sistemler çalışmaya devam edeceklerdir. Burada şunu da belirtmeliyiz. facade katmanı, alt sistemleri referans almasına rağmen, bunun tersi kesinlikle yanlıştır. Eğer, alt sistemler, facade katmanını rafarans alırlarsa, facade katmanının sistemdeki zorunluluğu artacaktır. Bu ise facade'ın kullanım mantığına aykırıdır.
Facade tasarım deseni, bir çok farklı tipteki uygulamalarda kullanılabilmektedir. Özellikle güvenlik önlemlerinin yoğun olduğu finansal uygulamalarda kullanılmaktadır. Kritik işlemlerin yapıldığı katmanlar ile kullanıcı ilişkisi, facade katmanı sayesinde dolaylı olarak sağlanmaktadır. Facade deseni bunun yanında, servis yönelimli mimarinin de bir parçası olabilmektedir. Biz de uygulamamızda buna benzer bir demo yapacağız.
Uygulamamızda, XML web servisi modelini kullanacağız. Bunun için öncelikle web servisleri ile ilgili yazımı okumanız faydalı olacaktır. Uygulamamızda, sayı ve yazı işlemlerini yerine getiren iki alt sistem öğesi bulunmatadır. Web servisi olarak çalışan bu iki alt sistemden aldığı verileri istemciye ileten üçüncü bir web servisimiz daha vardır. Bu servis, diğer iki servisi referans olarak eklemekte ve onlarla karşılıklı veri alış verişi yapmakadır.
Bu kadar teorik bilgiden sonra uygulamamızı kodlamaya başlayabiliriz. Öncelikle sayısal işlemleri yerine getirecek servisimizi yazıyoruz.

Diğer bir alt sistem parçamız ise yazı işlemlerini yerine getiren servisimiz.

Alt sistemlerin kodlanması bittikten sonra facade katmanını kodlayabiliriz. Öncelikle alt sistemlerimizi, facade katmanı olan projemize referans olarak ekliyoruz. Bunun için, alt sistemlerin URL'lerini, facade katmanı olan projemizde Add Web Referance diyerek ekliyoruz. Referans ekledikten sonra facade katmanımızın doslaları aşağıdaki gibi olacaktır.

Facade katmanının kodlarını aşağıdaki gibi yazıyoruz. Kodlardan da anlaşıldığı gibi, bu katman, alt sistemlerin metodlarını tek bir çatı altında topladı ve tek bir yerden servis edilmesini sağlıyor.

Facade katmanını da kodladıktan sonra, artık istemci uygulamamızı yazabiliriz. Bunun için basit bir form projesi açıyoruz. İlk olarak yapmamız gereke şey, projeye sağ tıklayıp, Add Service Reference demek ve facade katmanının URL'ini girmek. Böylelikle facade katmanı olan projemizi, istemci uygulamamıza referans olarak eklemiş oluyoruz. Daha sonra formumuzun görünümüzü yazımızın sonunda görüldüğü şekilde tasarlıyoruz. Artık kodlarımızı yazabiliriz.

Projemiz çalışmaya hazır.


Görüldüğü gibi uygulamamız başarıyla çalışıyor. Başka bir yazıda görüşmek üzere.
Tags: web servisleri, c#, oop, design patterns, yazılım mimarisi