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.