Makale Özeti

Bu ve bundan sonraki yazılarımda. NET ile yazılım geliştirirken kullanmamız gereken referans yazılım mimarilerini ve bu mimarilerde kullanmamız gereken parçaları incelemeye çalışacağız.

Makale

Bu ve bundan sonraki yazılarımda. NET ile yazılım geliştirirken kullanmamız gereken referans yazılım mimarilerini ve bu mimarilerde kullanmamız gereken parçaları incelemeye çalışacağız.Amacımız bir fonksiyon yada kütüphaneyi anlatmak ve nasıl çalıştığını paylaşmaktan çok öte yöntem ve tecrübelerin sizlere aktarımıdır. Bu tecrübeler sadece bana ait tecrübeler olmayacak elbette Microsoft’un ünlü Mimari Takımı Pattern & Practices grubundan izler bulacaksınız yazılarımda.

İlk Sorumuzla işe başlayalım o halde; “Mimari nedir?” bu sorunun yeryüzünde pek çok cevabı vardır elbette ancak yazılım geliştirme senaryoları için en uygun olanı sanırım;
“Bir şeyin çalışmasını sağlayan sistemik, yapısal ve düzenli prensipler oluşturulması –- berrak olduğu için bilgilendiren bir ürünün, ya da fikrin, ya da politikanın itinalı üretimi (Richard Saul Wurman).”

Gerçekten de bir yapı tasarlanırken bu yapıyı oluşturan parçalar ve bunlar arasındaki uyum, yapı içerisindeki her parçanın görevini en iyi şekilde icra etmesi bütününü oluşturan mimarinin başarılı olması açısından oldukça önemlidir.

Günümüzde mimari kavramı yazılım sektörü için oldukça önem kazandı. Geliştirilen uygulamalar ve uygulamalar arası etkileşim büyüdükçe yazılan uygulamaların bazı temel prensipler doğrultusunda geliştirilmesi ihtiyacı doğdu. Projeler büyüdükçe yazılan kodun kalitesini yönetmek oldukça önemli bir sorun haline geldi. Aslında burada mevzu bahis olan sadece kalite de değil; Kalite, Güvenlik, Yönetilebilirlik, Değiştirilebilirlik ve performans kavramları çalışan uygulamalarda vazgeçilmez parametrelerdir.

Bahsettiğim parametreleri yönetmek için tüm yazılımcılarınızı aynı ve üst seviye bilgi ve beceri sahibi olmasını beklemek proje maliyetleri açısından oldukça negatif bir yaklaşım olacaktır. Ayrıca tüm yazılımcılarınızın aynı yazılım prensiplerini kullanarak yazılım geliştirmeye zorlamakta ve bunu denetlemekte oldukça güçtür.

Güvenlikle ilgili bir örnek vermek gerekirse; geliştirdiğiniz bir web uygulamasında yazılımcılarınızdan her Web Page in Load ında kullanıcının o sayfaya yetkili olup olmadığını kontrol eden kodu yazmasını beklemek ve bunu denetlemek oldukça zordur. Bunu uygulamanızın mimarisinde çözümlüyor ve Web Page düzeyinde kod yazan bir geliştiriciye bu sorumluluğu bırakmıyor olmanız beklenir.

Yazılım şirketleri açısından kaliteli ürün geliştirmek, geliştirilen ürünün pek çok farklı ihtiyaca sahip müşteriye en az özelleştirme maliyeti ile satılması oldukça önem kazanmaktadır.
Kilit noktamız farklı bilgi seviyesindeki yazılımcıları aynı projede çalıştırırken temel yazılım geliştirme prensiplerimizden vazgeçmemektir.

Günümüzde rekabetçi piyasa koşullarında bahsettiğim parametreler ışığında  kod yazma ve hızlı ürün geliştirme ihtiyacının karşılanması amacıyla şirketlerin kendi kod yazma kültürlerini ve kendi kütüphanelerini geliştirmektedir.

Mimarinin Amacı Nedir?

Mimarinin amacı, uygulamanın yapısını etkileyen ihtiyaçları karşılamaktır.

Bir mimar, tasarımla ilgili kararları verirken, parçalar arasında doğal etkileşimi düşünmelidir. Etikileşim  kullanıcı, sistem, ve iş isteklerine hitap etmeyi gerektirir. Talep edilen iş istekleri ile teknik ihtiyaçlar birbirinden ayrılmış olmalıdır. Geliştirdiğiniz mimaride iş istekleri değişiyor ama teknik ihtiyaçlarınızı karşılayan katmanlar değişmiyorsa başarılı bir altyapı geliştirilmiş olduğu söylenebilir.

Prensip; Uygulamanın değişen parçaları ile sabit parçalarını birbirinden ayrılmalı ve değişmeyen parça tekrar kullanılabilir şekilde tasarlanmalı mimariye bırakılmalıdır.

Temel Mimari İlkeleri:

Aşağıdaki Referans Mimari veri güdümlü bir uygulamanın olmazsa olmaz parçalarını içermektedir.



Referans Yazılım Mimarisi temel olarak 5 ana parçadan oluşmaktadır.

1- Presentation Layer
2- Services Layer
3- Business Layer
4- Data Layer
5- Cross – Cutting Konsept

Bu parçaların her biri ayrı birer makale konusu fakat bunları birer cümleyle özetleyelim.

1- Presentation Layer : Kısaca uygulama önyüzü olarak ifade edebiliriz. Kullandığımız bir Web Uygulaması yada Silverlight , Windows ,WPF uygulamaları Mobile uygulamalar raporlama çıktıların tamamı Presentation Layer dır. Kısaca Presentation Layer kullanıcı ile etkileşen önyüzdür.

2- Services Layer : Yapılan işlemlerin çıktılarını dış dünyaya ve Presentation layer a açtığımız servislerdir. .NET 3.x ile gelen WCF altyapısı sayesinde tam manasıyla SOA ( Services Orientede Architecture- Kavramın içerisini ilerleyen yaı) ‘ a uygun bir servis katmanı oluşturabiliyoruz.

Soru: Servis Katmanının uygulamamıza katacağı yetenek nedir ? Neden mimarimde Presentation Layer ile etkileşim kurmak için Servis katmanını kullanmalıyım?

Cevap: Günümüzde yazılım geliştirme ve uygulama stratejilerinde uygulamaların birbirleri ile etkileşim ve bir sistemi kullanabilmek için ekranlara bağlı olmama ihtiyacı doğmuştur. Bu nedenle modern yazılım mimarilerinde Ekranlar (Presentation Layer) Servisler üzerinden uygulama ile iletişim kurması öngörülmektedir. Böylelikler her ekranın işlevini yapabilecek bir servisin varlığı da mümkün olacaktır.

3-Business Layer: Geliştirilen Uygulamanın Beynidir. Data Layerdan gelen veriler Uygulamanın Core Business yapısı tarafından yorumlanarak Services Layer yardımıyla Presentation Layer da son kullanıcıya sunulur. Tüm kritik algoritmalar bu yapı üzerinde barındırılır.

4-Data Layer: Geliştirilen uygulamanın kalbidir. İnsan vücudu için kan ne kadar önemli ise bir uygulama için veri aynı şeyi ifade eder. Data Layerin görevi Business layerdan gelen veriyi veritabanına kaydetmek, veritabanından yapılan sorgulamanın sonucunu da Business Layer a aktarmaktır.

5-Cross – Cutting Konsept: Konfigrasyon , Sisteme giriş doğrulama ve yetkilendirme işlemlerinin yapıldığı, istisnaların yönetildiği, Loglama işlemlerinin yapıldığı katmanlar bütünüdür. Cross Cutting Konsept birden fazla katmandan oluşmaktadır.

Bunlar ;

- Authentication
- Authorization
- Configration Management
- Operational Management
- Comminication
- Exception Management
- Logging and Insturmentation
- State Management
- Validation katmanlarıdır.

Belirttiğim bu parçaların her biri üzerinde 1-2 makale yazabileceğimiz derinlikte inceleyeceğiz. Bu makaleyi Yazılım mimarilerine giriş şeklinde ele aldım ancak girişi henüz tamamlamadık. Bir sonraki yazımda temel yazılım prensipleri ile ilgili önemli noktaları açmaya devam edeceğiz. .Her Konuda Görüş ve önerilerinizi mail atabilirsiniz. Görüşmek üzere.

Tarık Gökhan Kızılırmak
tarikgokhan@gmail.com