Tasarım
Desenleri tamam da Anti-Pattern de neyin nesi? Son günlerde popülaritesi gittikçe
artan konulardan biri de AntiPattern lerdir. Bu yazımızda AntiPattern’lerin
ne olduğu hakkında bilgi vermeye çalışacağız.
AntiPattern
Nedir?
AntiPattern,
bir problemi çözmek için kullanılan "kötü" çözümleri belirten bir
kavramdır. (Belki bunu tekrar etmekte fayda vardır: KÖTÜ çözümleri
belirleyen yaklaşımdır!!)
Tabi
ki bir problemi çözerken en iyi yöntemlerin verilmesi, her zaman uygulanan yöntemdir.
Tasarım desenleri, (Design Patterns) işte bu belirttiğimiz işi en iyi şekilde
yapmaktadırlar. İnsanların yıllarca karşılaştıkları problemlere etkin çözümleri
kalıplaştırarak tekrar kullanımını sağlamışlardır. Şu anda da nesneye yönelik
tasarımda Tasarım Desenleri’nin kullanımı, çözüm yolları için oldukça yaygındır.
Kötü
çözümleri belirlemek, iyi çözümleri belirlemek kadar yararlı olabilir.
Yazılım
geliştiren herkes, problemlerle karşılaşır ve bunları çözmek için birden fazla
çözüm yolu bulabilir. Peki bulduğunuz çözüm yolu, iyi bir çözüm müdür? İleride
sizin başınıza yeni işler açabilir mi? Yazılımda bir değişiklik gerektiğinde,
bunu engelliyor mu? Çözümünüz, yazılımın uzun süre çalışması durumunda bellek
sorunlarına yol açıyor mu? Bu soruları istediğimiz kadar arttırabiliriz. AntiPattern’ler,
çok sık karşılaşılan ortak sorunlardaki kötü çözümleri size sunar. Bu çözümler
ile kendi çözümlerinizi karşılaştırırsınız ve çözümünüzün kalitesi hakkında
fikir sahibi olursunuz. Size hangi çözümü uygulamamanızı gösterirler.
Antipattern,
iyi bir çözüme benzeyen, ama gelecekte sorunlara yol açan çözümlerdir.
Yazılım
tarihi boyunca insanlar, problemlere karşı yeni çözümler sunmaya çalışmışlardır.
Yazılım birikimi ilerledikçe, bu çözümler birikmiş ve standart çözümlere ulaşılmıştır
(Design Patterns). Aslında çözümlerin ortak, genel çözümler olduğu ortaya çıkmaktayken
ve tasarım desenleri oluşturulurken, kötü çözümler de birer birer ortaya çıkmıştır.
Belirli bir birikimin oluşması sonucunda, bu yanlış, ileride soruna yol açabilecek,
kötü çözümler de ortak paydalarda toplanmaya başlanmış ve "antipatterns"
kavramı ortaya çıkmıştır.
Antipattern’ler
bu kapsamda, yazılım çözümlerinde yapılan ortak yanlışları bulup sınıflandırmaya
yarar diyebiliriz. Bunun yanısıra, antipattern’ler bu çözümlerle uğraşırken,
alternatif çözümleri de yazılım geliştiricilere sunmaktadırlar.
Antipattern’ler,
aslında yeni bir kavram değildir ve proje geliştirmenin her aşamasında karşımıza
çıkmaktadır. Örnek olarak, hepimizin bildiği "spaghetti code" bunlardan
biridir. (Spaghetti Code: özet olarak, genelde kod üzerinde çok düşünülmeden
yapılmış değişiklikler sonucunda, işleyişin segmentler-kod parçaları- arasında
devamlı yer değiştirmesiyle sonuçlanan karışıklık yapı.)
Örnek
AntiPattern: "CopyPasteProgramming"
Bir
programcının çözüme gitmek için, kodu bir fonksyiondan diğerine kopyalayıp
yapıştırarak aynı kodu sıklıkla kullanması, bunun yerine nesneye dayalı
yaklaşımı (kalıtım) tercih etmemesi.
Bu
çözüm kısa vadede işinizi görse de yazılım geliştirme, değiştirme, bakım
aşamalarında çok büyük sorunlara yol açan bir yaklaşımdır.
|
Anti-pattern’ler
konusu, aslında sadece "kod yanlışları" ile bağlantılı değil, projenin
tüm evrelerinde, verilen kararlar, yapılanlar, izlenen yöntemler ile de ilgilidir.
Yazılım
projeleri geliştirmek, başarıyla yönetmek tecrübe isteyen bir eylemdir. Bu tecrübe,
projeler içinde çalışarak, farklı farklı sorunlarla karşılaşa karşılaşa elde
edilir. Fakat biraz yukarıdan bakacak olursak, insanların, farklı projelerde
benzer hataları yaptıklarını görebilirsiniz. Bu hatalar projenin zamanının gecikmesine
veya projenin başarısız olmasına yol açmış olabilir. İşte bu gibi durumlar da
antipattern"ler olarak gösterilebilmektedir. Bu anti-pattern’ler de yine
farklı farklı projelerde tekrarlanan takımın yaptığı hataların kalıplaştırılması
ile, sınıflandırılması ile oluşturulmaktadır.
Bu
tarz bir antipattern örneği verecek olursak, bütün tasarım desenlerinin kullanılmaya
çalışıldığı yazılım projesi, buna çok güzel bir örnektir:
Ana
Sebep:
Geliştirme takımı, tasarım desenlerinin neler olduğunu yeni öğrenmiştir ve bu
"süper" fikirleri hemen projesinde kullanmak istemektedir.
Diğer
Sebepler:
1. Proje geliştiricisinin, projesini tasarım desenlerini kullanarak geliştirmek
istemesi.
2. Proje geliştiricisinin projeyi tasarım desenleri üzerinde çalışabilmek için
bir fırsat olarak görüyor olması.
Tasarım
Aşaması:
Tasarım Desenleri tabi ki bir proje tasarımında kullanmak için mükemmel yaklaşımlardır.
O halde hepsini kullanmak, kesinlikle mükemmel bir yazılım
sistemi yaratacaktır.
Düşünülen
Çözüm (Kötü
çözümümüz):
Kullanılcak tasarım desenlerinin bir listesi çıkarılır ve atlanan bir tasarım
kalıbının olmaması için bu tasarım desenlerinin uygulamaları ile ilgili bir
kitap alınır. (Böylelikle projede tüm desenlerin kullanabileceği kesinleşmiş
olur!)
Beklenen
Sonuç:
Tasarım grubu kitaptaki tüm tasarım desenlerini uygun yerlerde kullanmıştır.
Etkiler:
O kadar çok tasarım kullanımı kullanılmıştır ki bu tasarımın kodlanması çok
karışık hale gelmiştir. Bu karışıklık geliştirme takımının hızını, motivasyonunu
bunlara bağlı olarak da verimliliğini düşürmüştür. Hatta takım, yapılan tasarımın
tam olarak ne yaptığını anlamamaya başlamıştır.
Gerçek
Çözüm:
1-Her tasarım kalıbı uygulanması gereken hedef kapsamı da belirtmektedir. Bu
yüzden sırf desenleri kullanmak için hedefleri dışında kullanılmamalıdırlar.
2-Genelde tasarım desenleri, kitapları "bu tasarım desenini nerede kullanabilirim"
diye okuyanlar tarafından değil, keşfedilen bir soruna çözüm arayan kişiler
tarafından kullanılmalıdır.
Sonuç:
Antipattern’ler
bizlere projenin tüm evrelerinde (tasarım, kodlama dahil) sıklıkla hangi hataların
yapıldığını gösteren, bu hataların nelerden yapıldığını gösteren ve bu hataların
nasıl önlenmesi gerektiğini anlatan yapılar olarak yazılım geliştirmede kullanılan
kavramlardır. Genel olarak büyük çapta projeler ile uğraşan geliştiriciler ve
proje yöneticileri tarafından hataları en aza indirmek için çok iyi bilinmesi
gereken, önemli bir konudur.
Antipattern’ler
halen gelişen bir konudur ve yazılımlar olduğu sürece gelişmeye devam edecektir.
Unutmayalım ki insanlar hata yaparlar, bu hataların sınıflandırılarak önümüze
sunulması, böylelikle hataları yapmadan ders çıkarmamız, biz proje geliştiren
insanlar için çok faydalı olmaktadır.
Not:
Aslında ben zaten antipattern’leri biliyorum, bu sorunlarla hep karşılaştığımdan
okumama gerek yok diye de düşünebilirsiniz. Fakat bu konuya böyle yaklaşmaktansa
önemli bir araştırma konusu olduğunun bilinciyle yaklaşılırsa, yazılımcılara
çok büyük faydalar getirmektedir. Sonuçta tasarım desenleri de onlara bu isim
verilmeden önce dünyada bilnen çözümlerdi fakat tasarım desenleri olarak anılmaya
başlandıktan sonra ve belirli bir disiplin altında incelenmeye başladıktan sonra
konuya olan ilgi çok arttı ve büyük ilerlemeler kaydedildi.
Kaynaklar:
http://searchvb.techtarget.com
http://dev2dev.bea.com
Tanıl
Ergin
[email protected]
Makale:
Anti-Pattern'ler Yazılım Mühendisliği Tanıl Ergin
|