Yazılım tasarım desenleri; yaygın
olarak ortaya çıkan yazılımsal sorunların çözümü için test edilmiş,
kanıtlanmış, tüm yazılım geliştiricileri tarafından kabul görmüş genel
yazılımsal çözümlerdir. Yazılımda tasarım desenlerini, ilk kez resmi olarak 1995
yılında, Erich Gamma, Richard Helm,
Ralph Johnson ve John Vlissides GOF(Gang Of Four - Dörtlü Çete)
yayınladıkları kitap ile dünyaya duyurdular. Bu güne kadar GOF ekibinin
duyurmuş olduğu 23 adet tasarım deseni ile ilgili; yayınlanmış sorunların
çözümünün aksini iddia eden yada alternatif çözüm üreten bir yazılım
geliştirici henüz çıkmadı. Yeni tasarım desenleri duyuruldu, ancak, bunlarda farklı
sorunlara farklı çözüm önerileri sunuldu. Yayınlanmış olan bu 23 adet yazılım
tasarım deseni Creational (Yaratımsal), Structural(Yapısal) ve
Behavioral(Davranışsal) tasarım desenleri olmak üzere 3 grupta toplanmıştır.
Faydaları;
özetle ifade edecek olursak, tavsiye edilmiş ve kabul görmüş olan tüm yazılım
geliştirme prensipleri, yöntemleri ve paradigmalarında belirtilmiş olan yazılım
geliştirme kazanımlarına katkı sağlar diyebiliriz. En iyi yazılım ürününü en
kısa, en güvenli, en yönetilebilir, en hızlı ... en mükemmel yapmamıza yardımcı
olan kod şablonları dır diyebiliriz. Başlıklar halinde biraz açacak olursak;
- Yazılım geliştirme süreci(SDLC-Software Development Life Cycle)nin etkinliğini, verimini artırır, süreç yönetimini kolaylaştırır.
- Kod okunabilirliğini artırır,
- Yazılımın üretim ortamına çıkma ve ondan sonraki bakım maliyetini azaltır.
- Defensive(güvenli) kod geliştirmeye yardımcı olur.
- Yazılım geliştiricilerini teknik borç yükünden kurtarır.
- SOLID, GRASP, … gibi standart, prensip ve paradigmalara uygun kod geliştirmeyi sağlar.
- Gelen tüm yeni yazılım gereksinimlerini hızlı bir şekilde karşılayabilmeye.(Efektif, hızlı , çevik kod geliştirmeye) yardımcı olur.
Tabi eğer anti pattern a düşmezsek, söz konusu yukarıdaki faydaların sağlanmasını beklemek lazımdır. Kullanacağınız tasarım deseni yanlış ve gereksiz kullanıldığında fayda yerine zarar da getirebilir. Buna dikkat etmek gerekir.
Şu
ana kadar ihtiyacım doğrultusunda tecrübe ettiğim tasarım desenlerini buraya
not düşmeye çalışacağım;
Creational
Design Patterns
Singleton: Oluşturulacak olan bir
nesnenin sadece bir kez oluşturulmasını garanti eder.
Builder: Karmaşık, çok nitelikli
nesneleri kolayca oluşturmayı sağlar.
Factory Method: Bir
nesnenin implementasyonunu soyutlayarak(gizleyerek) oluşturmayı(initialize
etmeyi) sağlar.
Abstract Factory: Factory
Method un yaptığı işi yapar, ancak, birden fazla türde nesne oluşturulacak ise her
bir nesne türünün soyutlanarak create edilmesini sağlar
Prototype: Bir nesnenin aynı özelliklerde
ve atanmış değerleri ile birlikte bir prototipinin kopyalanarak oluşturulmasını
sağlar. Oluşturulan kopya işlemi “Shallow(Sığ) copy” ve “Deep(Derin) copy”
olmak üzere iki türlü yapılabilmektedir. Shallow copy de nesnenin sadece
primitive değişkenlerinin değerleri kopyalanır, Deep copy de ise hem primitive
hemde geriye kalan tüm referans tipli alt nesnelerinin değerleri kopyalanır.
Structural
Design Patterns
Adapter: İki uyumsuz nitelikte olan
nesnenin niteliklerinin uyumlu hale getirilmesini sağlar. Günlük hayata
uyarlanarak ifade edecek olursak, prize takılan adaptör gibi düşünülebilir. Normalde
220 volt tan farklı voltajlarda çalışan cihazlar için mutlaka bir adaptör
gereklidir.
Decorator: Bir nesnenin var olan
özelliklerini bozmadan, değiştirmeden o nesneye
yeni özellikler, yeni nitelikler eklenmesini sağlar. (Bir tabloyu dekore edip o
tabloya çerçeve eklemek gibi)
Facade: Çoklu, karmaşık yazılımsal alt
sistemlere erişimi, soyutlayarak, basitleştirerek bir arayüz üzerinden, yani
bir cephe üzerinden ilgili yazılımsal alt sisteme erişimi ve kullanım kolaylığını
sağlar.
Proxy: Gerçek nesne üzerinde
gerçekleştirilecek işlemler çok kaynak gerektirdiğinde, o işlemleri yapmak
imkansızlaşır. Bu durumda gerçek nesne yerine vekil nesneler üretilerek çözüm
bulmayı sağlar. (Cache server gibi)
Behavioral
Design Patterns
Command: Bir request bir nesne altına
komut olarak sarmalanarak, requesti invoke edecek nesnelere iletilip, ilgili
nesnede çalıştırılmasını sağlar.
Observer: Bir nesnenin, gözlemci olan
başka bir nesneye kendini kaydettirmesi sonrasında, o nesnenin kendisinde
gerçekleşen eventlerin, durum değişikliklerinin ilgili gözlemci sınıf
tarafından yayınlanmasını sağlar.
State: Kapsamı(context i) belli olan
bir nesnenin var olan durumunun(state inin) if condition ları kullanmadan
değiştirebilmesini sağlar. Her durum(state) için ayrı bir nesne oluşturulur.
Oluşturulan her state nesnesi de var olan ortak kapsamda(context te) farklı
davranış gösterir.
Strategy: Bir nesnenin yapmış olduğu
davranışı veya çalışma şeklini runtime da değiştirebilmeyi sağlar. Her davranış
için ayrı nesne oluşturulup, context nesnesinin constructor undan enjekte
edilir. State de kapsam nesnesinin durum değişikliği söz konusudur, strateji
deseninde ise kapsam nesnesinin farklı stratejide davranış göstermesi söz
konusudur.
Template Method:
Yapılacak her ortak işlem için ortak parametreleri kullanan bir şablonu(template
i) oluşturularak effective kod yazabilmeyi sağlar. Ortak işlemler için
copy/paste yapmaktan kurtarır. Her nesnenin ortak işlemine ait farklı değerler
üretmesini sağlar(Arif‘in dilekçesi, Ahmet’in dilekçesi, …vs.). Abstract class
içinde ortak işlemlerin yapılacağı methodlar tanımlanır. Parametrelerin
değiştiği nesneler abstract class tan inherite edilir.
Visitor: Bir ziyaretçi nesnesi, aynı
işlemi farklı model nesnelerine göre farklı davranışlarda yaptırır. Strateji
deseninde de farklı davranışlar için farklı nesneler kullanmıştık ancak visitor
deseninde davranış türünü belirleyen ortak methoda visitor nesnesi tarafından
davranış türü nesnesi enjekte edilmektedir. Strateji deseninde ise constructor
dan enjekte edilmekteydi. Yeni bir ziyaretçi nesne türü gereksinimi olduğunda
ilgili ziyaretçi interface inin güncellenmesi gerekmektedir. Strateji deseninde
yeni davranış türü gereksiniminde yeni model nesnesinin diğerlerini etkilemeden
eklenmesi yeterlidir.
Kaynaklar:
Hiç yorum yok :
Yorum Gönder