Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Sefer Algan
Sefer Algan
http://www.seferalgan.com
İletişme geçmek için tıklayın.
71 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: deseni deseninin facade gerekecektir. gereken ilgili mevcut nesneleri seviyede siklikla sistemi sistemin tasarim varolan yaptiginiz Yazılım Müh. Sefer Algan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : Yazılım Müh.
Yayınlanma Tarihi : 7.6.2005
Okunma Sayısı : 48587
Yorum Sayısı : 0     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 8.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 8.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 8.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 8.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
"Facade" Tasarım Deseni Nedir?
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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.

Makale:
"Facade" Tasarım Deseni Nedir? Yazılım Mühendisliği Sefer Algan
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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