Başlıklar

24 Nisan 2013 Çarşamba

Çok Katmanlı Mimari


Yazılımda mimari nedir ?

Yazılım da mimari yazılım sistemini oluşturan ana katmanların,bileşenlerin,sunucuların ve çeşitli türlerdeki istemci uygulamaların iletişim biçimini göstermek için yapılan çalışmaların hepsini kapsar.Kullanılan teknolojiden bağımsız olarak yapılan bu çalışmalar bir anlamda bütüne bakma çabasıdır diyebiliriz.

Çok Katmanlı mimari nedir ?

Modern dünya da istemciler tarafından o kadar çok istek ve problem var ki yazılım teknolojilerin bunları yerine getirmesi,çözmesi pek de kolay olmuyor.İstenilen her bir fonksiyonellik  yazılım projelerine implemente edilmesi anlamına gelir.İstenilen fonksiyonelliklerin çok fazla olduğunu düşünürsek yazılım projeleri de complex bir hale geliyor. İşte  bu complex yapıyı yönetmek ve değişimi kolaylaştırmak adına projeler belirli bir standarta ve düzene ihtiyaç duyuyor.Çok katmanlı mimari yaklaşım da bu karmaşık yapıyı sorumluluklara , fonksiyonelliklere , İşlere ve görevlere göre birbirinden ayırarak daha basit ve yönetilebilir uygulamalar yapılmasını sağlar.
Uygulama mimarisi istenilen sistemin ihtiyaçlarına, maliyete, zamana ve insan gücüne göre şekillenir.Burada şekillecek olan yapılar; Katman sayısı,sunucu sayısı, kullanılmak istenen teknolojiler ve daha bir çok şey.


Neden çok katmanlı mimari ?

Çok katmanlı mimari ile birlikte projeye ait bir standart oluşturulmaya çalışılır.Bu şekilde geliştiriciler arasında uyum ve geliştirme kolaylığı sağlar.Kodlarınızı katmalara ayırmak;yönetimi kolaylaştırır,değişim sürecini hızlandırır,esnek ve özelleştirilebilir bir yapı sağlar,bakım kolaylığı sağlar, bağımsız şekilde katmanların güncellenmesini sağlar ve daha bir çok avantajını sayabiliriz.Dezavantajı olarak deployment sürecini söyleyebiliriz.Her geliştirme sonucu değişen sistemi güncellemek için deployment (taşıma) yapmak gerekir.Sistem çok ayrışık olduğu için bu zamanınızı alır,özellikle ayrı ayrı sunucuların olduğunu düşünürsek.
Bir de şu şekilde düşünelim; .NET veya JAVA uygulamaları olsun hepsi bir framework çatısı altına kurulmuş teknolojiler ve biz geliştiriciler bu altyapıyı kullanarak yazılım geliştiriyoruz.Bu kadar Standartı ve Sistematik bir mimariye sahip olan bu teknolojiler üzerinde geliştirdiğimiz uygulamalar kesinlikle mimariye ve standartı olmayan yapılar olamaz.Bu bir çelişkidir.Emin olun bu şekilde yazılan uygulamaların desteği ve harcanılan maliyet sonucu, bir süre sonra projenin çöpe atılmasına yol açar.
Çok katmanlı mimari yazılan her projede zaten vardır.İster Veri merkezli(Data Centric),ister alan merkezli (Domain Centric) uygulamalar olsun kodların katmanlara bölündüğünü görürsünüz.Açık kaynak kodlu projelere baktığınızda kodlar dizinlere,isim uzaylarına(namespace) bölünmüş ve bir düzen oluşturulmaya çalışılmıştır.Burada kullanıcının kolay kurulumu ve deployment süreci düşünülerek bu şekilde tasarlanmıştır.Benim burada söylemek istediğim her proje içeirisinde zaten çok katmanlı mimari stil kullanılıyor olması.
Çok katmanlı mimari kullanımı bir seçenek değil zorunluluktur.
Şimdi çok katmanlı mimari ile bir uygulama tasarlamaya çalışalım ve kullanılan standart katmanları ve sorumluluklarını inceleyelim.
Sunucular;
Yaptığımız web uygulamaları genel olarak Client-Server  şeklinde mimariye sahiptir.Bizim uygulama kodlarımız server tarafında çalışır.Burada istemcinin istekde bulunması (Request) ve o isteğe verilen cevap (Response) şeklimizi yazılımcı olarak biz belirtleriz.Projelerde yapmaya çalıştığımız İstemcinin isteğine göre hızlı,doğru bir şekilde cevap vermesini sağlayacak yazılım sistemini(server apps) geliştirmektir.


Yukarıda client-server mimarisine ait bir şema görüyorsunuz.Burada Server tarafındaki çeşitli sunucu tipleri görüyoruz.
Web Server ; uygulamaya ait kullanıcı arayüz kısmının bulunduğu projedir.Bu projede css, javascript , html ,aspx ve çeşitli kaynak dosyalarını barınıdırır.

Application Server ; Uygulamanın tamamının bulunduğu sunucudur ve burada dll dosyaları yer alır.

Database Server ;   Veritabanının fiziksel olarak yer aldığı sunucudur.

Sunucular arası iletişimde şemada belirttiğim (1) nolu iletişim; AJAX,javascript,Jquery veya HTTP ileitşimi kullanılabilir.(2) nolu iletişimde .NET remoting,Web Service,WCF gibi teknolojiler kullanılabilir.(3) nolu ileitişimde ise ADO.NET ,Entity Framework,NHibernate,LinqToSql gibi teknolojileri kullanabiliriz.
Kendi geliştirdiğimiz küçük ve orta düzeyli projelerde maliyet sebebiyle Web Sunucusu , uygulama ve veritabanı sunucusunun işlevini de görür.Fakat Enterprise çözümler söz konusu olduğunda bu serverları kullanmak gerekir.Hatta kurumsal firmlarda yazılan çok fazla ve birbirinden bağımsız uygulamalar olduğunu düşünürsek her uygulama için farklı uygulama sunucusu kullanılabilir.Bu yazımdaki örnek şemada uygulama sunucusu kullanılmayacaktır.
N Katmanlı Mimari Nedir?
N-katmanlı mimarinin ingilizcede 2 tane karşılığı bulunmaktadır. N-tier Architecture ve N-layer Architecture. Tier ve Layer kelimeleri hemen hemen aynı anlamı  (katman) taşımaktadır. Fakat ikisini ayıran ince nokta ise, N-tier architecture da her bir katman ayrı server lar üzerinde tutuluyor. Yani katman kavramı bırada ayrı bir server anlamına geliyor. N-layer Architecture da ise bütün katmanlar aynı server üzerinde tutuluyor. Farklı server lardan bilgi çekmek bize daha fazla zaman kaybettireceği için tüm katmanların aynı server da tutulması tercih sebebidir.

Neden N Katmanlı Mimari Kullanıyoruz?
N katmanlı mimari sayesinde yapmış olduğumuz işler kendi sınıflarına ayrılıp farklı bir katmanda tutuluyor. Böyle bir yapının bize yararı ise bu kodların istenilen zamanda kolay bir şekilde değiştirilip güncellenmesidir. Bütüm sistemi araştırıp, değiştirip ve güncellemek yerine sadece bir katmanı güncellemek bize kazanç sağlayacaktır. Sistemde bulunan hataların kolayca farkedilip, bunlara çözüm bulunmasıdır. Bunların yanında her bir katmanda bulunan kodların diğer katmanlarda görünmemesi güvenliliği arttırmaktadır. Örnek olarak veritabanıba giriş bilgileri sadece veri katmanında bulunur ve istenildiği zaman kolaylıkla değiştirilebilir ve diğer katmanlarda çalışan kişiler bu bilgileri göremezler.

N Katmanlı Mimaride Bulunan Katmanlar Nelerdir?
N katmanlı mimari genel olarak 3 katmandan oluşur. Bu yüzden n katmanlı yerine 3 katmanlı mimari de denmektedir. Fakat 3 katman yerine, var olan katmanları kendi arasında bölerek daha fazla katman yaratmak mümkündür. Bu yüzden n katmanlı mimari denmektedir.

A. Sunum Katmanı (Presentation Layer) :
Sunum katmanı adından da anlaşılacağı gibi kullanıcıların göreceği arayüz ve bu arayüze bağlı nesneler. Örnek olarak ASP.NET içerisindeki ASPX sayfaları, projemiz içerisindeki kontroller ve nesneler bizim sunum katmanımızı oluşturmaktadır.

B. İş Katmanı (Business Layer):
İş katmanı veri katmanıyla sunum katmanı arasında çalışan bir katmandır. Veri katmanından verileri alır, onları değiştirip ya da silip sonucu sunum katmanına gönderir.  Örnek olarak ASP.NET te, iş katmanı veri katmanından DataSet, DataTable ya da DataReader halinde verileri alıp bunları sunum katmanındaki nesnelere gönderir. İş katmanına veri katmanından sadece DataSet gibi değerler değil normal kullandığımız string, integer gibi değerlerde alabiliriz. Mesela almış olduğumuz integer değeri veri katmanındaki tabloları sorgulayıp bize tablodaki satır sayısını gönderiyor olabilir.

C. Veri Katmanı ( Data Layer):
Veri katmanı bizim veri tabanımız yada verileirn bulunduğu kaynak olabilir. Örnek oalrak SQL Server, Access’i verebiliriz. Fakat sadece bunlarla sınırlı değildir, Oracle, MySql olabileceği gibi XML bile olabilir.
 Şimdi şemamızı biraz daha genişleterek devam edelim.

Temel olarak çok katmanlı mimari de standart olarak sunum katmanı,İş katmanı,veri erişim katmanı ve Cross-Cutting denilen, bütün katmanların ihtiyaç duyacağı kodların bulunduğu katman ile birlikte 4 adet katman yer alır.Bu katmanlar birbirlerini referans alarak birbirlerinin method ve sınıflarını kullanırlar.Şimdi katmanları inceleyelim.
Presentation Layer : Yapılan uygulamanın kullanıcı arayüzüne ait projeler bu katmanda oluşturulur.Bu katmanda yapılan projeler; Web uygulamaları,mobil siteler, mobil uygulamalar,Silverlight,Winform veya Html 5 gibi uygulamalarının kullanıcı arayüzüne ait dosyalar yer alır diyebiliriz.

Business Layer : Uygulamanın iş mantığı, Veritabanına ait oprasyonel(CRUD) işlemler , kullanıcı rolleri,yönetimi,yetkilendirmeler bu katmanda yapılan projelerin sorumluluğundadır.

Data Access Layer :  Sadece Veritabanına erişimi sağlamakla sorumlu katmandır.Her veritabanı için ayrı bir veriye erişim sınıfını içerebilir.Kurumsal uygulamalarda  Kullancı tabloları,raporlara ait tablolar,temel uygulama tabloları farklı farklı veritabanlarında bulunabilir.Bu katmanda yazılan veri erişim sınıfı biraz daha soyut ve daha generic bir yapıda olmasına dikkat edilmelidir.

Cross-Cutting Layer : Diğer 3 katmana ait projelerin ihtiyaç duyduğu ve projelerdeki teknik fonksiyonelliği içeren projeleri barındırır.Caching,ExceptionHandler,Loging gibi mekanizmalar bu katmanda yer alır ve ihtiyaca göre diğer katmanda bulunan projelere referans edilir.Burada kullanılan projeler kendi geliştirdiğiniz projelerde veya third party projelerde kullanılır.Örneğin Microsoft best-practices lerinde olan Enterprise Library içeirisindeki block lar kullanılabilir.

Yorum Gönder

Yorumunuz için teşekkürler.En kısa sürede size dönüş yapmaya çalışacağım.

 
Copyright © 2014 Ahmet Oğuzhan YANIK | Bilgisayar Sistemleri Öğretmeni