Bu site emekli olmuştur. Arşiv amaçlı olarak
BT AKADEMİ
sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa
.net TV
Makaleler
Kaynak Kod
Haberler
Serbest Köşe
Canlı Köşe
Forum
C#nedir?
Ekibimiz
RSS
ADO.NET/SQL
C / Sys Prog.
Genel
Mono ve .NET
Silverlight
XML / Web Serv.
X86 Assembly
C++ / C++.NET
J#.NET / Java
.NET 3.x
UML / Analiz
Yazılım Müh.
ASP.NET
C# / VC#/.NET
Mobil Prog.
PHP 5
YAZAR HAKKINDA
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ı
:
48385
Yorum Sayısı
:
0
yorum yaz
SİTE İÇİ ARAMA
Ü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.
C#nedir? hesabınız yok mu?
Üye olabilmek için
tıklayın
.
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.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Turhal Temizer
Conda install environment.yml Package
21.11.2024
Turhal Temizer
Mac OS/X Removing CUDA
21.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak
21.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi
21.11.2024
Diğer Herşey
»
Makaleler RSS
»
Video Gönder
»
Makale Gönder
»
Serbest Köşeye Yazı Gönder
»
Yazar Başvurusu
»
C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa
/
Makaleler
/
Yazılım Müh.
/
"Facade" Tasarım Deseni Nedir?
"Facade" Tasarım Deseni Nedir?
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
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
Dizayn ve Kodlama
bt
akademi
. Tüm Hakları Saklıdır © Copyright 2002-2009 c#nedir?com
Makaleler
Serbest Köşe
Makale Gönder
.Net TV
Video Gönder
Canlı Köşe
Kaynak Kod
Forum
Haberler
Röportajlar
Anketler
C# Nedir?
İletişim
Site Haritası
RSS
Favorilere Ekle
Üyelik
Hesap Aktivasyon
Ekibimiz
Ekibe Katıl