WikiTurk
Editor Login | Register
Ekle

> Akademik İnternet ® > Yazılım Mühendisliği

Nnpat
(Relased 10.10.2009 19:25:45)
imageimageimage %122


Katmanlı Mimari nedir ? Faydaları nelerdir ?





Merhabalar, Uzunca bir süre ara vermiştim makale yazmaya, YazGeliştirin yeni yüzü, yeni yapısı ile hepinize tekrar merhaba diyerek yeni makalemize başlıyorum..:)

Neden Katmanlı Mimari ?

Eğer uzun zamandır programcılıkla uğraşıyorsanız, gerek kıyısından köşesinden gerekse direk içinde olduğunuz konudur bu. Katmanlı mimari. Kimileri vakit kaybı olarak görebilir, Ancak artılarını ve eksilerini sıraladığınız zaman emin olun çok daha fazla artısı olan bir program yazma modelidir katmanlı mimari.

Daha önceki yazılarımda değinmiştim katmanlı bir mimarinin nasıl olması gerektiğine...

Öncelikle şunun bilinmesi gerekir. “En uygun yapı budur” diye birşeyi kimse söyleyemez. Mimari sizin yazacağınız uygulamanın ihtiyaçlarına göre şekillenir. Bazı uygulamalarda 3 katman yeterliyken, bazı uygulamalarda 6 yada 7 katmana çıkabilir (temelde hepsi üç katmandır tabiiki, ancak artık MS 3 katmanlı demek yerine n katmanlı demeyi tercih ediyor)

Katman katman diyip duruyoruz şimdi bu katmanların neler olabileceğini inceleyelim. Bir kere yazılan uygulamaların %98 in veritabanına bağımlı çalıştığını düşünürsek bir veriye ulaşım katmanına ihtiyaç duyarız. Verinin veritabanı sisteminden getirilmesi ve veritabanı sistemine gelen verilerin eklenmesi için. Böylece demekki ilk katmanımız veri katmanı (Data Layer).

Veritabanından veriler veri katmanını aracılığı ile geldi, yada veri katmanından veritabanına iletilecek veriler geldi. Ama bu veriler benim uygulamamın ihtiyaçlarına ve yapılarına ne kadar uygunlar. Bunları bir şekilde düzenlemek gerekiyor. Benim programımdaki işlere uygunluğunu ayarlamam ve denetlemem gerekiyor. İşte bunun için ikinci katmanımız çıktı. İş katmanı (Business Layer).

Kullanıcının göreceği, ve kullanıcıdan girdiği verilen alınacağı, yada daha önceden girilmiş verilerin bir şekilde kullanıcıya gösterilmesi için gereken bir katman daha var. Şöyle düşünelim kullanıcı ile iletişim halinde olan bir katman ve bu katman kullanıcının girdiği verileri alıp bir alt katmana iletiyor. Daha sonrada veritabanından gelen verileri gösteriyor kullanıcıya. İşte bu katmanda sunum katmanı (Presentation Layer).

Şimdi yukarıda anlattıklarımı kısaca bir toplayalım. Kullanıcı verileri sunum katmanı vasıtası ile girer. Girilen veriler programdaki ihtiyaçlara göre (bu ihtiyaçlar iş ihtiyaçlarıdır tabiiki, örneğin yetkisi olmayan kullanıcının ekleme yapamaması gibi) iş katmanından geçerek, gerekli iş ihtiyaçlarını karşıladığı kontrol edilir ve veritabanına yazılması için verileri veri katmanına iletir. Kullanıcı daha sonra bu eklediği veriyi görmek istediğinde ise benzer bir senaryo ile karşılaşılır. Veriler veritabanından veri katmanı ile çekilir. Gelen verilerin uyumluluğu ve şekli iş katmanında kontrol edilir ve sunum katmanına yollanır. Böylece kullanıcılara gösterilir.

İlk yazılan programlar, tek katmanlı olarak yazılıyordu buna aynı zamanda “Monolithic” de deniliyor. Tek katmanlı uygulamalarda sunum katmanı, iş katmanı ve veritabanı katmanları tek bir bilgisayarda bulunuyorlardı. Örneğin adabas sistemleri gibi. Adabas sistemleri bir veritabanı ve bu veritabanına direk sorgulamalar yapılacak form lardan oluşmuştur.

Tabiiki bu tarz bir yönteminde kendisine göre artıları ve eksileri var. Örneğin, değiştirdiğiniz bir yapının anında tüm sistemde aktif olması gibi. Ancak bozulan bir yerin (bileşenin) tamiri oldukça zor oluyor. Çünkü o bölüm hata verdiğinde bütün sistemin çalışması duruyor.

Gelelim iki katmanlı mimariye. Aslında iki katmanlı mimaride kendi içinde ikiye ayrılıyor. Şöyle düşünelim, veritabanı olmak zorunda, kullanıcı ile iletişimi sağlayacakta bir katman olmak zorunda, geriye iş katmanı kalıyor. İşte bu iş katmanının, veri katmanına yada sunum katmanına yamanması şeklinde iki katmanlı mimari uygulanabiliyor.

Eğer iş katmanınızı veri katmanına yıkarsanız, yani örneğin stored procedure lerinizle iş kurallanızın sağlanıp sağlanmadığına bakıyorsanız bu tarz yapılara “Fat Server” yani şişman sunucu deniliyor. Diğer ihtimal ise sizin sunum katmanınızda bu işleri yapmanız, bunada tahmin edebileceğiniz gibi, “Fat Client” yani şişman istemci deniliyor.

Artılarını eksilerini inceleyelim, örneğin siz Fat Server yaptınız yani iş uygulamalarınızı sunucu tarafında çözdünüz. Ama uygulamanızın başka bir veritabanı sistemine taşınması gerekti. Sizin yazdığınız bütün stored procedure lerinizi diğer sisteme aktarmanız gerekiyor. Ve iş ihtiyaçlarınızı yazdığınız için bu stored procedureleriniz çok karmaşık olacaktır. Bu karmaşık işleri diğer sistem için tekrar yazmanız gerekecek ki bu oldukça zahmetli ve maliyetli bir işlemdir.

Diğer durumu inceleyelim, örneğin Asp.Net uygulaması yazdınız ve uygulamanızın arkasına (örneğin EkleButton_Click olayına :) bu iş uygulamalarınızı yazdınız. Ancak sisteminizin bir bölümüde Windows uygulaması olmalı. O zaman bu yazdığınız kodların büyük bir bölümünü Windows sisteminede kopyalamanız gerekiyor (.Net te kopyalamak yeterli biz çözüm) ancak yinede bunlarda bir değişiklik olduğunda sizin için yine çok maliyetli ve zor bir iş sizi  bekliyor olacak...

İşte çözüm, 3 (yada n) katmanlı mimari :)

Her uygualamanız ayrı katmanlar halinde, ve yönetilebilmesi  değiştirilmesi oldukça kolay ve hızlı. Çünkü neyin nerede yapıldığı ve nasıl yapıldığı belli.

Bu aslında bizim çok önceleri öğrendiğimiz bir yapıdan farklı değil.

Eğer programın çok uzun kodları olacaksa alt parçacıklara (fonksiyonlara) böl. Böylece hangi fonksiyonun ne iş yaptığı  belli olacak ve bir problem varsa değiştirlecek bölüm o fonksiyon olacak, sizin yüzlerce satırlık kodlarınızın arasında bir bölüm değil. Böylece kodunuzu (programınızı) yönetmeniz çok daha kolay olacak. Kısacası parçala ve yönet :)

Peki neden katmanlı mimari yazarız;

Az önceden yukarıda bahsettiğim gibi, katmanların en önemli avantajı parçala ve yönet olayıdır. Hangi işi nerede yaptığınızı bildiğiniz için bir problem durumunda sadece oradaki bölümü değiştirip programınızın çalışmasına kaldığı yerden devam etmesini sağlayabilirsiniz. Bir diğer avantajı ise, uygulamanızın genişlemesi durumu, eğer uygulamanızın başka bir veritabanında çalışması yada uygulamanızın başka bir istemci sisteminde çalışması gerekiyorsa, işiniz oldukça kolay ve zahmetsiz olacaktır.

Şimdi katmanlı mimarinin nasıl olması gerektiğine bakalım, bu yazı genel anlamda katmanlı mimarinin nasıl olduğuna değinecek ve daha sonra bu serinin ikinci yazısında ise daha ileri seviyede, katmanlı bir yapının nasıl oluşturulacağını inceleyeceğiz.

Öncelikle programınızı bazı modüllere bölmeniz mantıklı bir yaklaşım olabilir. Yani örneğin internetten satış yapan bir sisteminiz varsa, bu sistemin satış yapan bölümünü bir modül, kullanıcılar ile ilgili bölümünü bir modül yapabilirsiniz, böylece daha çok alt bölüme işlerinizi ayırıp, daha rahat yönetebilirsiniz.

Peki mimari olarak uygulamanızı nasıl paçalara ayırabilirsiniz ? yukarıdan aşağıya inceleyelim.

İlk önce kullanıcıların bilgileri görebileceği bir sunum katmanı oluşturalım. Örneğin Asp.Net kullanıcı bilgileri görücek tamam, ama bilgide girebilmeli örneğin kullanıcılardan yaş bilgisi istiyoruz, kullanıcının buraya gerçekten rakammı girip girmediği bilgisini denetlememiz gerekiyor. Ama bunu direk Asp.Net kodunun arkasına yazmak olmaz. Daha sistematik bir şekilde ilerlemeliyiz. Bunun için bir Controller katmanı oluşturalım, amacı GUI den gelen verilerin bizim sistemimiz için uygunluğunu denetlemek olsun. Örneğin kullanıcı yaş alanına bir veri girdi ama gerçekten rakammı girdi, yada telefon numarasını istedik ve bizim sistemimiz için başına 0 koymaya gerek yok, ama kullanıcı başına 0 koydumu koymadımı, işte bunları denetlemek için bir controller katmanına ihtiyacımız var. Verinin doğruluğunu denetledik ancak bu gelen veri bizim iş ihtiyaçlarımızı karşılıyormu, diyelimki biz sistemimize 18 yaşından küçüklerin üye olmasını istemiyoruz, bu bir iş kuralıdır, yada bir kullanıcının bir işi yapmaya yetkisi varmı yokmu ? işte bu tarz işlemleri gerçekleştirmek için bir iş katmanına ihtiyacımız var (ihtiyaç halinde bu bölümde katmanlara ayrılabilir, örneğin yetki denetimleri için bir bölüm, diğer iş ihtiyaçları için bir bölüm) verinin doğruluğunu ve iş kurallarımıza uyduğunu doğruladık şimdi veriyi ekleme aşamasına geldik, diyelimki veriyi ekleyebilecek stored procedure ler yazdık, bu stored procedure leri çağıracak onların parametrelerini oluşturacak bir data katmanına ihtiyacımız var. Ve tabiiki birde bu stored procedureleri çalıştıracak, bizim Ado.Net metotlarımızı kullanacak bir veritabanı yardımcısı katmana. Bu olayın sadece yukarıdan aşşağıya bölümü. Aynı şekilde datayı gösterecek yani veri katmanından yukarıya çıkaracak da bir yapı gerekiyor. Veriyi bu veritabanı yardımcısı katmanından alıp, iş katmanından geçirip, gerekiyorsa gelen veride düzenlemeler yapıp, Controller katmanına iletecek ve daha sonrada Asp.Nette düzgün bir şekilde gösterecek...

İlk makale için bazı anlaşılması ve yazılması zor konulara değindiğimi düşünüyorum, bir sonraki makalede daha gelişmiş yapılar üzerinde duracağız ve bir çok projenin ihtiyacını karşılayacak, genişleyebilir yapıdaki bir mimari üstünde duracağız.

 












Derecelendir
Kaynak [email protected]
İçerik İhbarı



Open Source Document Project AUP&TOS