Dr. Volkan Tunalı'nın Kişisel Blogu

Bilgisayar, Teknoloji, Bilim, Sanat

Katmanlı Tasarım Yaklaşımı

leave a comment

Bir yazılım sistemini tasarlarken sistemi kullanıcı arayüzünden veritabanına kadar birbiriyle etkileşim halindeki çeşitli katmanlardan ya da üst üste bloklardan oluşan bir bütün olarak düşünmek gerekir. Burada en üst katman kullanıcı arayüzü, en alt katman ise veritabanı olarak düşünülebilir. Tabi ki her sistemin en alt katmanı veritabanı olmak zorunda olmadığı gibi en üst katmanın kullanıcı arayüzü olmak zorunda değildir. Ancak genelde böyle olduğunu düşünmek çok da yanlış olmayacaktır. Genellikle de veritabanı katmanının üzerinde bir Veri Erişim Katmanı (Data Access Layer – DAL), DAL’ın üzerinde ya da onunla bütünleşik bir Persistence katmanı, daha üzerinde de Business Layer dediğimiz sistem çapındaki işleyişi denetleyen katman yer alır. Sistemin gereksinimlerine göre bu katmanların sayısı arttırılabilir ya da azaltılabilir.

Yazılım sistemi geliştirirken katmanlardan oluşan yapısal bir düzen oluşturmanın çeşitli avantajları vardır:

  • Fonksiyonları belirli katmanları kodlamak daha kolaydır ve daha az hata ile sonuçlanır.
  • Sistemi bu katmanları kullanarak oluşturmak daha az karmaşık ve daha az zahmetlidir.
  • Sistemi yeni gereksinimlere ve değişikliklere adapte etmek daha kolaydır.
  • Hata (bug) bulmak ve gidermek daha kolaydır.
  • Sistemin başka yazılımcılar tarafından anlaşılması ve öğrenilmesi daha kolaydır.
  • Herhangi iki katman arasına yeni bir katman ilave etmek ya da aradaki bir katmanı çıkartmak katmanlı yapı kullanılmayan bir sistemde aynı amaca yönelik yapılması gerekecek revizyona göre genellikle daha az maliyetlidir.

Sistemde yer alacak katmanları belirlerken ve tasarlarken de şu ilkeler doğrultusunda hareket edilmelidir:

  • Her katman sadece belirli bir fonksiyonu ya da fonksiyon grubunu içermelidir. Farklılaşan fonksiyonlar söz konusu olduğunda başka bir katmana taşınmalı ya da yeni bir katman yaratılmalıdır. Dolayısıyla katmanların sayısı fonksiyonalite açısından farklılaşan ünitelerin sayısı olacaktır.
  • Katmanlar arası arabirimler tasarlanırken bilgi akışı minimum düzeyde olacak şekilde tasarlanmalı.
  • Tabi ki her alt katman üstündeki katmana bir servis sağlamalı. Tersi yönde bir hizmet sunumu ya da bağımlılık söz konusu olamaz; böyle bir durum oluşuyorsa tasarımda bir sorun var demektir.
  • Bir katman genellikle altındaki bir katmandan servis almalı, çok gerekmedikçe bu katmanı atlayıp daha alt bir katman ile haberleşmemelidir. Ama buna istisnalar söz konusu olabilir.

Özetle, yazılım geliştirirken fonksiyonel birimlerin birbirinden kesin ve net sınırlarla ayrıldığı katmanlı bir yaklaşım projenin ilk zamanlarında uğraştırıcı ve zaman alıcı görünse de sonrasında getireceği avantajlar ile bu zaman kaybı fazlasıyla telafi olacak, bu yaklaşımın yararları sistemin geliştirilme sürecinde görülecektir.

Written by vtunali

Haziran 4th, 2009 at 1:04 am