|
Tasarım Kalıpları - 2, Facade |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bu tasarım kalıbını, ismini bilmeden birçok
kez uygulamış olduğunuzdan eminim.
Tasarım kalıplarının ilk yazısında, tasarım kalıpları
hakkında genel bir bilgi vermeye çalıştık. Bundan sonraki yazılarımızda
örnek kalıpları anlatmaya devam edeceğiz.
Bu bölümde, çok sık kullanılan, çok
yaygın bir çözüm olan "Facade" kalıbı hakkında
bilgi vereceğiz. Facade, varolan bir sistemin üstüne daha yüksek
seviye bir arayüz tanımlayıp o sistemi kullanmamızı sağlar. Bu yüksek
seviyeli arayüz, sistemi daha kolay kullanmamızı sağlar.
Temel olarak, bir sistemin hepsini kullanmak yerine belirli
kısımlarının kullanılacağını düşünün. Bu durumda tüm fonksiyonları
sağlamak gereksiz olacaktır. Ayrıca geliştirme takımına sonradan katılan kisiler,
sistemi öğrenmek için aslında kullanılmayan bir sürü fonksiyon
ile de uğraşacaklardır. Facade ile, istenilen basitlik ve sadelikte bir arayüz
elde edilecektir.
Bu tasarım kalıbı aslında sadece yazılımlarda değil yaşamın
her evresinde kullanılmaktadır. Örneğin geliştirilecek bir sistem için
belirli bir sahada bilgiye sahip olunması gerekebilir. Mesela eczacılık ile
ilgili web tabanli bir alışveriş sitesi sistemi geliştirdiğinizi düşünün.
Bu durumda eczacılık ile ilgili bazı bilgilere ihtiyacınız olacaktır fakat tüm
bilgileri bilmek gereksiz olacaktır. Örneğin bir ilacın içerigini
bilmek sizin için gereksizken hangi ilaçlarin reçetesiz
satilabilecegi, hangi ilaçlarin vergi oranının ne kadar olacağını
bilmelisiniz. Bu durumda takımdan birini gerekli bilgileri öğrenmek için
ve size bunları sunması için görevlendirirseniz, eczacılık hakkındaki
tüm bilgileri tüm takımın öğrenmesi gerekmez, bu sorumlu kişi
gerekli noktaları belirler ve size sunar. Geliştirme takımı da sadece bunlara
bağlı kalarak sistemi geliştirir. Bu durum Facade tasarım kalıbına çok
güzel bir örnek teşkil etmektedir. Eczacılık sisteminin "tüm
hizmetlerini, fonksiyonlarını, kısıtlarını" bilmek yerine sizi ilgilendirecek
olan, eczacılık sisteminin "alt kümesini" bilmeniz işinizi
yapmaniza yardimci olacaktir. Sorumlu kisi, takim ile eczacilik sistemi arasinda
bir “arayüz” olacaktir ve eczacilik sistemini kullanmaniz kolaylasacaktir.
Yukaridaki örnegin aynisi, gelistirdiginiz kod sistemleri
için de tam olarak örtüsecektir.
Yukaridaki sekilde de görülecegi gibi, A, B, C, D
sisteme direct olarak ulasmak yerine arayüz tarafindan onlara saglanan
fonksiyonlara ulasabilmektedirler. Bunun birçok yarari vardir:
1. Sistemin kullanimi kolaylasir
2. Arayüz sayesinde sistemin kontrolü kolaylasir
3. Gerektiginde kolaylikla yeni fonksiyonlar eklenebilir ve çikarilabilir
4. Bakimi kolaylastirir
5. Alt taraftaki karmasik sistemin anlasilmasi gerekmez
KÜNYE
Isim: FACADE
Amaç: Varolan bir sistemin kullanilmasini kolaylastirmak.
Kendi arayüzünüzü tanimlamak.
Problem: Varolan sistemi kullanma zorunlulgu, sistemin altkümesini
kullanma zorunlulugu
Çözüm: Yeni bir arayüz saglayarak bu
arayüz üzerinden kullanimin saglanmasi
Birimler: Özellesmis arayüz
Gerçeklestirim: Gereksinimleri karsilayacak seklilde
yeni bir arayüz tasarla, Bu arayüzün varolan sistemi kullanmasini
sagla
Örnegin, çalismakta olan bir eczane sistemi olsun,
bu sistemin siniflari basitçe asagidaki gibi olsun:
class IlacSorgu {
public:
IlacSorgu(String IlacAd);
BaglantiYap();
}
class IlacIstek {
Public:
IlacIste(Integer IlacNo);
SiparisVer(Integer IlacNo);
SiparisIptal(Integer SiparisNo);
}
class Eczane {
Public:
Baslat();
EczaneKaydet(Integer EczNo);
SatisYap();
String EczaneAdi;
}
|
Yukaridaki sistemde, eczane ile ilgili çesitli isler yapmakta olan siniflar
mevcuttur. Simdi biz, tüm bu islemleri yapan sistemden, kendi sistemimiz
için gerekli olan islemleri yapacak olan bir “EczaneYonetim”
sinifi yaratabiliriz:
Class EczaneYonetim {
public:
SistemiBaslat();
SatisYap();
};
EczaneYonetim::SistemiBaslat(String EczaneAdi)
{
Eczane::Baslat();
Eczane::EczaneKaydet(EczAdi);
}
EczaneYonetim::SatisYap(String IlacAd)
{
IlacSorgu::BaglantiYap();
IlacSorgu::IlacSorgu(IlacAd);
IlacIstek::IlacIste(IlacAd);
IlacIstek::SiparisVer(IlacAd);
}
|
Yukaridaki örnekte de gördügünüz gibi,
varolan bir sisteme arayüz yapilarak geliistirecegimiz sistemde kullanilacak
islemler, basitlestirildi. Bu “EczaneYonetimi” sinifi sayesinde
artik satis yapmak isteyen bir sinifin eczane ile ilgili diger sinifilari bilmesine
gerek kalmadi. Sadece “SatisYap” metdounu çagirarak bir satis
islemini yapabilmektedir. IlacSorgu, IlacIstek siniflarinin ne yaptigi ile hiçbir
bilgiye ihtiyaci yoktur. Hatta boyle siniflar oldugunu bile bilmesine gerek
yoktur.
Makale:
Tasarım Kalıpları - 2, Facade Yazılım Mühendisliği Tanıl Ergin
|
|
|
-
-
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
|
|