Çok Katmanlı mimari nedir ?

Ç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.

Hemen bir şemada inceleyelim
sa-21

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.

Şimdi şemamızı genişletmeye devam edelim.
sa-3

Yukarıdaki şemada küçük ve orta düzeyli yazılım projelerinde kullanılabilecek olası bir yazılım modeli görülmektedir.

Şimdi katmanlarda yer alan projeleri inceleyelim.

Company.Caching : Verilerin ve sistemde dolaşan varlık(Entity) tiplerinin önbelleğe alınması istemciye hızlı cevap verebilmek için önemlidir. Cache mekanizmanızı her katmanda görebilmemiz mümkün. örneğin UI cache , Database Caching mekanizması ve nesnelere ait önbellekleme sınıf ve methodlarını bu projede yer alır.

Company.ExceptionHandling : Sistem tarafından olası hataların tanımlanması ve hatalar sonucu olınacak aksiyonlar bu proje içerisinde yer alır.örneğin; yetkilendirme hataları, ödeme hataları vb.

Company.Logging : Her seviyede oluşabilecek hatalara veya işlemelere ait bilgi loglarının tutulmasının sağlandığı bir projedir.Çeşitli formatlarda loglama işlemi yapılarbilir.Text dosyaları,EventLog lar, veritabanı logları,xml formatlı loglar vb.

Company.Validation : Genelde validasyonlar UI katmanında client taraflı javascriptler kontrol edilir ve bu kolay,tercih edilen ve güvenilir bir yöntemdir.Sisteminize geçerliliği olmayan verilerin dolaşmasını kimse istemez ama bazı durumlarda diğer katmanlarda da validasyon kontroller gelebilir.Örneğin methodlara ait argümanların validasyonu veya iş varlıkları (Business Entity) üzerinde Attibute tabanlı validasyon işlemleri gibi.

Company.Helper : Microsoft tarafında daha çok Util ifadesini kullanıyor.Bu proje genel yardımcı sınıflar,methodlar ve extention lar içerir.MailUtil,SitemapUtil,RssUtil,HashUtil gibi.

Company.Security : Bu projeler aslında cross-cutting katmanında da yer alabilir ama veri tabanı iletişiminin çokca kullanıldığı için ben bu projeleri business layer içerisinde tasarlamayı tercih ettim.Bu projeler de kullanıcıya ait işlemrlin bütün sorumluklarını üstlenir.Rol yönetimi,Profil yönetimi,üyelik yönetimi gibi.

Company.Business.Operation : Üst katmandan gelen varlık nesnelerine ait veritabanı işlemlerini , transactionları , sorgulamaları veya batch işlemleri gerçekleştirir.Veri erişimini sağlayan veri erişim katmanına sıkı sıkıya bağlıdır.

Company.DataAccessIntegration : Birden fazla tipde veritabanı kullanan sistemler için veri erişimine ait entgegrasyon projesidir.projelerimize mysql,sql,access,oracle,MongoDb,SqlLite gibi veritabanlarını birlikte kullanma ihtiyacı hissedebiliriz.İşte bu projede veri erişimini ait veritabanı tipinden bağımsız tipler (arayüzler,abstract sınıflar) ver alır.

Çok katmanlı mimariye sahip uygulamalar sadece kodların belirli bir düzen içinde ayrıştırılmasında ibaret değildir. Her katmanı tasarlarken dikkat edilmesi gereken en önemli nokta birbirine olan bağlarının sıkı olmasını engellemektir.Olabilecek her türlü katman ve proje değişimini projenin genelini etkilemiyecek şekilde tasarlamak gerekir.Aynı işleve sahip ama farklı sorumlulukları olan sınıfları arayüzler veya soyut sınıfları(Interface,abstarct class) kullanarak oluşturulmalıyız.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s