N-Tier Architecture Nedir?
Yazılım projelendirme de kullanılan bu yapı proje içinde iş bölümü yapmayı ve her katmanın ayrı bir işle uğraşmasını sağlar. İlk aşamada iş yükü olarak görünse de, sürdürülebilirlik açısından çok daha az maliyetli ve kodlanma kolaylığı sağlar.
Planlanan her işte olduğu gibi yazılımda da en temel amaç performanstan, maliyetten ve zamandan tasarruftur. Oluşturulan her algoritmayı ve uygulamayı birbirinden ayıran en temel yapı ne kadar performanslı çalıştığı, ne kadar az maliyet ile gerçekleştirildiği ve ne kadar az zaman içinde işlem sonucuna erişildiğidir.
Gelin bunu bir örnek ile anlatalım.
Diyelim ki evlisiniz ve akşam işten eve geldiğinizde eşinize misafir geleceğini, güzel bir yemek menüsü hazırlanıp servis edilmesi gerektiğini belirttiniz. Eşiniz tek başına hem eksikleri gidermeye, hem yemekleri yapmaya, hem de sofrayı kurmaya çalıştığında performans zaman kıyaslamasında ne derece lezzetli ve eksiksiz yemekler ortaya çıkabileceğiniz ve sofranın nasıl görüneceğini bir hayal edelim.
Birde yukarıda ki senaryoyu planlanan işin bölümlere ayırarak gerçekleştirildiğini düşünelim. Siz eksikleri tamamlarken eşinizin yemekleri hazırladığını ve çocuğunuzun sofrayı kurduğunu hayal edin. Bu iş bölümünden ilk senaryo ile aynı zamanda daha lezzetli, eksiksiz ve daha çeşitli yemekler ortaya çıkacağı gibi sofra da gayet şık bir şekilde hazırlanmış olur. İş bölündüğü için işi gerçekleştiren kişiler daha az performans harcarlar. Üstelik herhangi bir iş bölümünde gerçekleştirilen revizasyon diğer bölümleri daha az etkiler bu da bağımsız çalışmayı sağlar. İşte N-Tier Katmanlı Mimari iş yükü gibi görünse de proje büyüdükçe avantajları çok fazla olacaktır.
Proje katmanlara ayrıldığında her katman kendi içine kodlanabilir, her yazılımcı ayrı bir katmanı geliştirebilir. Burada ki amaç katmanlar birbirinden ne kadar bağımsız olabilirler ise o kadar rahat revize edilebilirler. SOLID prensiplerinden olan Dependency Inversion prensibine de uyulmuş oluyor.
Kodlarımızı daha küçük yapılara bölerek kolay kontrol edilebilirlik ve güncellenebilir kılarız. Ayrıca verilerimizin güvenliğini de en yüksek seviyede korur.
Örneğin bir web projesi için, tüm veri tabanı işlemlerimizi, butonların arkasına yazılan bir sorgu olarak yaparsak, tasarım değişikliğinde tüm kodları tekrardan yazmamız gerekir. Ya da çıkan herhangi bir sorun anında, katmanlı mimaride sadece sorunlu kısmı inceleyecekken, monolithic adı verilen tek katmanlı yazılımda tüm projeyi incelememiz gerekir.
Katmanlı mimari oluşturulurken kesinlikle en iyi yapı bu diyebileceğimiz bir katman yapısı yoktur. Tercih ettiğimiz teknolojiler, client ‘a sunacağımız olanaklar ve beklediğimiz performans gibi etmenler mimari yapı açısından önemlidir. Katman sayısı ve işleyişi bunlara bağlıdır. Genel olarak kullanılan 3 katmanlı mimari(DataAccessLayer, BusinessLogicLayer, UserInterface) bu durumlar göz önüne alındığında 7 katmana kadar bile çıkabilir. Ayrıca istenildiği taktirde her hangi bir katman da kendi içerisinde katmanlara ayrılabilir.
Presentation Layer(User Interface):
Kullanıcı ile etkileşim bu katmanda gerçekleşir. Kullanıcı bir buton veya benzeri bir araç ile bir istekte bulunur. İstek Business Logic Layer katmanında manager’a iletilirken, alt katmanlardan gelen bilgi ve uyarıları kullanıcı(istemci-client) kısmına iletir. Örneğin projemizin hem web hem de mobil uygulamaları olabilir. Bu uygulamalar gibi her türlü kullanıcı sistemi webservice gibi yapılarla Presentation Layer ile iletişime geçer. Bir web uygulaması geliştiriliyorsa MVC mimarisi bu katmanda geliştirilir ve bütün kullanıcı tabanlı görsel(web tasarım) tasarımlar kodlanır.
Business Manager Layer:
Database haricinde ek kontrollerin yapılması için kullanılır. TC Kimlik numarasının 11 haneli olması veya Iban bilgisinin TR ile başlayarak uzunluk kontrolleri gibi. Kontrol sonucuna bağlı olarak ya Data Access Layer katmanına istek iletilir ve istek sonucunu yada kullanıcıya uyarılar iletilir. Yazılım projelerinde de en maliyetli ve yorucu işlemler veri tabanı işlemleri olduğundan, veri tabanını rahatlatmış olur.
Data Access Layer:
Business Logic Layer katmanından gelen istekleri bağlı bulunduğu veri tabanı veya veri tabanlarına ileterek işlemleri gerçekleştiren ve sonucu tekrar Business katmanına ileten katmandır. Bütün database bağlantı ve işlem komutları(CRUD) bu katmanda yazılır ve geliştirilir.