|
|
|
"Facade" Tasarım Deseni Nedir? |
|
| Gönderiliyor lütfen bekleyin... |
|
|
Bu yazıda sizlere
Yapısal tasarım desenlerinden olan Facade tasarım desenini anlatacağım. Yazıma
başlamadan önce tasarım desenleri ile ilgili daha önce yazmış olduğum yazıların
bağlantılarını vermekte fayda görüyorum.
"Singleton"
Tasarım Deseninin(Pattern) C# ile Gerçekleştirilmesi
Abstract
Factory Tasarım Deseni(Design Pattern)
"Builder"
Tasarım Deseninin C# ile Gerçekleştirilmesi
"Prototype"
(Prototip) Tasarım Deseni
"Chain
of Responsibility(CoR)" (Sorumluluk Zinciri) Tasarım Deseni
Bu yazıda bahsedeceğim
facade isimli tasarım deseni aslında sizlerin çok fazla yabancı
olmadığı bir kullanım tekniği sunmakta. Bu yazı ile birlikte facade desenini
sıklıkla gerçekleştirdiğinizi fakat yaptığınız şeyin bir tasarım deseni olduğundan
haberdar olmadığınızı göreceksiniz. Facade kelime anlamı olarak
"cephe, yeni yüz" anlamlarına gelmektedir. Yani varolan bir nesneye
yeni bir yüz katma yeni bir cephe katma anlamında kullanılmaktadır.
Facade tasarım
deseni de GoF(Gangs of Four) olarak adlandırılan desenlerden olduğu için "Elements
of Reusable Object-Oriented Software, AW,1995" kitabındaki tanım ile başlayalım.
"Provide a unified interface to a set of interfaces in a subsystem.
Facade defines a higher-level interface that makes the subsystem easier to use."
Facade, varolan
bir sistemi spesifik bir iş açısından farklı açıdan ele almayı veya mevcut arayüzleri
kullanarak daha yüksek seviyede bir işi daha basit şekilde yapmayı tanımlar.
Örneğin çok karmaşık bir sınıf kütüphaneniz veya çok karmaşık bir modülünüz
var. Çoğu zaman belirli bir işlemi yapmak için çok fazla sayıda nesne üretmeniz
ve onlar arasında çeşitli ilişkiler kurmanız gerekir. Bunu sıkça yaptığınız
için çoğu zaman copy-paste (kopyala-yapıştır) yapmanız olasıdır. Facade tasarım
desenine göre ise belirli bir işi büyük bir kütüphane içerisinde sık sık yapıyorsak,
bu iş için özelleştirilmiş yüksek seviyeli bir arayüz tanımlamak kısa vadede
fayda getirecektir. Söz gelimi Microsoft’un Enterprise Library çalışması içerisinde
yer alan "Data Access Application Block" kütüphanesi Facade deseni
çerçevesinde hazırlanmıştır. Söz gelimi bir veritabanından bir sorguya göre
bir değer kümesi alıp onu göstermek için Connection,Command, DataReader,DataAdapter
nesneleri üretmeniz gerekecektir. Aynı zamanda bu nesneler arasındaki ilişkiyi
kaynak kodunuzun içine o işi her yaptığınız yerde gömmeniz gerekecektir. Bunun
yerine bu nesneleri kullanacak daha üst seviyede bir arayüz tasarlarsanız hem
yazdığınız kod satırı azalacak hemde nesneler arası ilişkileri kaynak kodunuzda
tutmamış olacaksınız. Bu durum ADO.NET için çok anlamlı olmayabilir ancak şöyle
düşünün : Bir yazılım uygulaması için alt kütüphane (layer) geliştiriyorsunuz
ve geliştirme aşamasında sıklıkla bu kütüphanenin arayüzünü değiştirmek zorunda
kalıyorusunuz. Eğer kütüphane içerisinde bulunan spesifik nesneleri bu kütüphaneyi
kullanan diğer modüllerde kullanırsanız yeni bir arayüz değişikliğinde çok fazla
zaman kaybedeceksiniz. Ancak değişebilir arayüzlier bir katman daha yukarıya
çıkarırsanız ana sınıfların arayüzünde yapacağınız değişiklikler sizi çok fazla
zorlamayacaktır. En azından tek bir yerden değişiklik yaparak uygulamanızın
yeni arayüze adapte olmasını sağlarsınız. O zaman şöyle bir soru akla gelebilir.
Ya Facade(yeni yüz) olarak tasarladığım yeni arayüzde değişik olursa : Hımm..işte
bu noktada Facade olarak tasarlayacağımız arayüzde nelere dikkat etmemiz gerektiği
önem kazanıyor. Yani her sınıf kütüphanesi facade tasarım desenine uygun olmayabilir.
Facade tasarım deseni, daha çok nesne ilişkileri fazla olan ve çok sayıda sınıfın
olduğu sınıf kütüphaneleri için kullanışlıdır. Yazımın ilerleyen bölümlerlinde
Facade tasarımları sırasında dikkat edilmesi gereken noktalar üzerinde duracağım.
Aşağıdaki şekilde Facade tasarım deseninin görsel gösterimi bulunmakta. Şekilden
de görüldüğü üzere Facade tasarımındaki amaç yeni birşey yaratmak değil varolan
bir şeyi farklı bir şekilde daha kolay çözmektir.

Şekil 1 - Facade Arayüzü Gösterimi
İsterseniz birazda
Facade tasarım deseninin gerçek hayata uygunluğu üzerinde duralım. Uzun zamandır
geliştirme yapan büyük bir yazılım geliştirme ekibine yeni birnin katıldığını
düşünelim. Bu kişinin varolan tasarımlara ve kütüphanelere adapte olması için
uzun bir süre gerekecektir. Eğer varsa yüzlerce sayfalık tasarım dökümanları
tek tek okuması gerekecek ve belkide içinde kaybolacaktır. Boyle durumlarda
en çok izlenen yol geliştiricilere sadece ilgilenecekleri kısımlarla ilgili
kolay anşılabilir arayüzler sunmaktır. Örneğin büyük bir iş akışı yönetim sistemin
geliştiren ekibe yeni katılmış birinden bütün sistemi her yönüyle anlamasını
beklemektense yapacağı işle ilgili kısımları soyutlayıp , bütün nesneleri bilmesine
gerek kalmadan basit bir arayüz sunmak daha faydalı olacaktır. Bu sayede siz
kütüphanenizii genişletmeye devam edeceksiniz ve ekibe yeni giren kişi bundan
minumum şekilde etkilenecektir.
Gelelim facade
arayüzleri tasarlanırken dikkat edilmesi gereken noktalara. Herşeyden önce facade
arayüzlerini yapmamızdaki amaç varolan kompleks bir sistemi daha kolay anlaşılabilir
ve daha kolay kullanılabilir hale getirmektir. Eğer facade arayüzlerini kullanırkan
oluşturulması gereken nesne sayısı ve kurulması gereken ilişki sayısı mevcut
sistemle aynı seviyede ise facade tasarımında bir yanlışlık var demektir. Bu
durumda facade tasarımından sonra aynı işi daha az satır kodla yada daha kolay
anlışalbilir kod blokları yapabiliyor olmamız gerekir. Facade ile ilgili en
önemli kural ise facade arayüzündeki kurulan kuralların asıl işi yapan sınıflarla
sıkı sıkıya bağlı olmaması gerekmesidir. Yani facade arayüzünü sistemden komple
çıkardığınızda mevcut sistemin aynen işini yapabiliyor olmasıdır. Facade varolan
sisteme yeni bir yüz katmaktan öteye gitmemelidir. Aksi durumda yapılan şey
facade değil sistemin olmazsa olmaz bir parçası haline gelir.
Facade ile ilgili
akıllara gelebilecek bir soru ise şudur: Acaba varolan bir sisteme yeni yüz
katma sitemin idare edilebilirliğini (management) olumsuz yönde etkilermi? Evet
bir noktada doğru. Ancak bize sağlayacağı fayda zararından fazla olacaktır.
Nitekim kompleks bir sistemde yaptığınız bir değişikliği sadece facade arayüzünde
değiştireceksiniz. Burdan da şu sonuç çıkıyor , facade arayüzünde (sınıflar
yada sınıfların metotları) değişime çok fazla açık olmaması gerekiyor. Örneğin
facade arayüzünü (facade olarak geliştirdiğiniz sınıfların kendi aralarındaki
ilişki ve metotların prototipinden bahsediyorum) de sıklıkla değişitriyorsanız
bu noktada bir sorun var demektir. Facade arayüzleri kesin olarak ihtiyaç duyulan
ve sistem nasıl olursa olsun ona ihtiyacımız olacak durumlarda tasarlanmalıdır.
Mesela her zaman bir SQL SP’yi çalıştırıp onun sonucunu bir değişkene atma ihtiyacımız
vardır. Dolayısıyla SQL SP çalıştıracak bir facade tasarımı her zaman işe yarayacaktır.
Sonuç
Facade kompleks
bir mevcut sistemin fonksiyonelitesini daha üst seviyede soyutlarak kullanılmasını
amaçlamaktadır. Facade tasarımının amacı tüm sistemi yeni bir alt sistem olarak
açığıa çıkarmak değil spesik bir işi örneğin veritabanında sorgu çalıştırıp
sonunucunu almayı daha basit ve anlaşılır kılmaktır.
deseni,deseninin,facade,gerekecektir.,gereken,ilgili,mevcut,nesneleri,seviyede,siklikla,sistemi,sistemin,tasarim,varolan,yaptiginiz, Yazılım Müh., Sefer Algan "Facade" Tasarım Deseni Nedir? Yazılım Mühendisliği Sefer Algan
|
|
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
|
|
|
|
|
|
|
-
-
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
|
|
|