kurumsal_yazilim_mimarisi

Kurumsal Mimari Nedir? Avantajları Nelerdir?


Kurumsal Mimari Yapısı

Merhaba bu yazımda sizlere kurumsal mimari nedir? Nasıl tasarlanır? Neden ve nerelerde kullanılır? Bu soruların cevaplarına değinmeye çalışacağım.

Normalde klasik proje modelinde yazdığınız kodlarıda, varsa kontrol mekanizmasınıda tek bir modülde tasarlıyorsunuz. Ancak kurumsal bir yapıda proje oluştururken tek modül üzerinden bu yapı yetersiz kalıyor.

Kurumsal projeler tasarlanırken ilk olarak mimari kısım tasarlanır, bu tasarım abstarct classlarla ve interfacelerle sağlanır.

Tabi siz simdi soracaksınız, ben bir class oluşturup içini dolduramıyorum da neden bir interfaceye ihtiyacım var?

Birinci Avantaj

Şirketlerde kıdemli yazılımcı veya mimar dediğimiz kişiler projelerin mimarilerini oluşturur, kurumsal projeler için bu mimarinin başlangıç noktası soyutlamaktan geçiyor.

Örneğin bir sipariş takip sistemi oluşturacağız, ilk olarak bir nesneye veya sınıfa ait olabilecek ürün kaydetme, silme, güncelleme veya listeleme gibi olaylar tanımlanır, bu olaylar tanımlanırken önce prototipleri tanımlanır, bu prototiplerdeki amaç bir ürün kaydederken bu kaydetme işlemi bir ürün nesnesi alır, burada kullandığımız metodun adı UrunKaydet olsun, bu metod tetiklendiğinde geriye bir boolean değer döndürebilirim veya kaydın id değerini döndürebilirim veya kaydın tamamen kendisini yani insert ettiğim nesneyi döndürebilirim. İşte bunu belirleyen kişi mimar, belirlenen yer ise abstract class oluyor.


Şimdi soracaksınız bunun kurumsal proje yapısıyla ne alakası var, siz kurumsal olmayan bir yapıda proje tasarlarken bir metod oluşturacağınızda bu metod ne iş yapsın, metodun adı ne olsun, hangi parametreleri alsın, geriye hangi tipte değer döndürsün sorularıyla uğraşıyor ve kendinizce en iyi yapıyı oluşturmaya çalışıyorsunuz bu durumu yaşamayan bir yazılımcı olduğunu sanmıyorum. İşte abstarct classlar sayesinde kurumsal yapıda çalışan bir yazılımcının karşısına mimarın bütün özelliklerini zaten abstarct class’ta tanımladığı metod gelir ve yazılımcı sadece bu metodun içini doldurmakla görevlidir. Küçük çaplı projelerde bu durum bir dezavantaj ve vakit kaybı olarak düşünülebilir ama büyük çaplı projelerde tüm projenin bütünlüğü ve performansı için mimarlar projenin mimarisini oluşturur, yazılımcılar ise bu mimariye göre işçiliklerini sergilerler, böylelikle karışıklıkların önüne geçilir ve birbirinden habersiz kişiler başkalarının sorumlu olduğu kısımları patlatmadan kendi bölümlerinde neyi ne kadar yazabileceklerini bilmiş olurlar.

İkinci Avantaj

Örneğin ürün takip projesini daha önce entity framework ile oluşturduk çok güzel çalışıyor hiçbir problem yok ama daha sonradan dedik ki entity framework yavaş biz artık micro orm ile çalışalım, klasik yapıda yeni oluşturulacak projede bana göre A metodunun adı B olmalı, geri dönüş tipi farklı olmalı ve aldığı parametrelerden 1 tanesi gereksiz diyelim bu durum yazılımcılar arasında bile karışıklık çıkartabiliyor ve entity frameworkteki yapı değişikliklere uğrayabiliyor ama kurumsal mimaride abstarct class’ta tanımlanan metodlarda mimari belirlenmiş ve sabittir siz o yapıyı nereye taşırsanız taşıyın mimari hep aynı kalır, hem karışıklıkların çıkması engellenir hemde projeyi başka bir yapıya taşımak kolaylaşır. Ayrıca abstarct sınıflara impelement edilmeyen metodlar interfaceler tarafından görülmeyeceği için yazılımcılar mimarlardan habersiz kafalarına göre metod ekleyemezler, bu durum ise projenin tek bir yerden kontrolünün sağlanarak karışıklığa izin vermeden bir bütün olarak oluşmasını sağlar. Başka bir avantajı da mimar abstractlarda bir değişiklik yaptığında bu update yazılımcının karşısına otomatik yansır.

Interface kullanmanın bazı diğer avantajlarından bahsedelim

1-  Katmanlar arasında bazı patternler kullanabileceğiz örneğim Business Layer(İş katmanı) ile Data Layer(Veri Katmanı) arasında repository pattern kullanabiliriz, böylelikle bağımlılığı azaltmış oluruz yani oluşacak nesnenin verdiğiniz sınıfa göre davranış değiştirmesi yani ben hiçbir koşul belirtmeden bir yapıya X classını verdiğimde Entity Frameworkle Y classını verdiğimde Micro ORM ile veya farklı bir yapıyla çalışmasına imkan verebilmiş olursunuz.

2- Interface ile çalışırken projeyi web servise çıkartmak kolaylaşmış oluyor çünkü web serviste impelmente yaptığımızda kullanılacak olan metodlarımız web serviste gözükür ve bize sadece bağlaması kalacak yani ben web serviste ne çıkarayım hangi parametreleri alayım gibi düşünmenize gerek kalmıyor mevcut mimari yapı zaten bunları kendiliğinden getiriyor.

Kurumsal Mimari Kullanımının Avantajları

1- Interfaceleri ayrı, entityleri ayrı, arayüzü ayrı, data layer katmanını ayrı kişilerin tasarlaması sınucunda birleştirerek yapı oluşturulabilecek şekilde esnek bir yapıya sahiptir ve bu anlamda grup çalışmasına çok yatkındır.

2- Ben elimdeki bir projeyle çalışıyorum tamamladım veya henüz yazma aşamasındayım, bu sırada MVC’den farklı bir teknoloji gelişti ve ben yapımı buraya taşımak istiyorum, işte bu durumda alt yapıyı değiştirmeden sadece projenizde %15’lik bir değişim yaparak tamamen teknolojimizi değiştirebiliriz. Mesela geçmişte bir projenizi ASP.NNET Form ile yaptınız, şuanda bu projeyi MVC teknolojisine taşımak istiyorsunuz, bu durumda tüm projeyi MVC de bir daha yazmaya çalışmak beklenen bir durum değildir, olması gereken durum veri tabanı bağımsızlığı ve teknoloji bağımsızlığı sunan yapılar oluşturmaktır. MVC de veri tabanı bağımsızlığını sunan yapı Entity Framework yapısıdır, teknoloji bağımsızlığını sunan yapılar ise Dependency Injection(Ninject) dediğimiz yapılar artı patterner olacak. Kısacası öyle bir yapı düşünün ki hiçbir değişiklik yapmadan MS SQL’den Oracle veri tabanına, veya istersem çok hızlı bir şekilde farklı bir teknolojiye geçebiliyorum, işte bunu kurumsal mimari sağlıyor.

Şimdi kurumsal bir projede oluşturulma sürecini konuşalım.

Kurumsal Mimari Yapısı

Kurumsal Mimari Nasıl Oluşturulur?


e-r Diagram örneği

1- İlk olarak veri tabanı oluşturulmadan e-r diagramı oluşturulur. Ve veri tabanımızın tabloları, özellikleri, ilişkileri vs. nasıl olması gerektiği detaylı bir şekilde planlanır.

UML diagram örneği

2- İkinci olarak  UML diagramı oluşturulur aktörler ve roller belirlenir, yani use caseleri belirlemiş oluyorsunuz.

3- TDD (Test Driven Development) oluşturulur.

TDD geliştirme yapılmadan önce oluşturulur. Örneğin benim Business Layer(İş Katmanın)  içinde bulunan bir metodum var, 5 tane eleman göndermesi gerekiyor, İş katmanını TDD ile test ederiz ve oradaki olası hataları tespit edip ona göre bir geliştirme yaklaşımı sunuyorsunuz, geliştirdikten sonra TDD kullanılamaz bu durumda ise ancak Unit Test yazabilirsiniz oda sizin yazdığınız kodu test eder.

4- BDD (Business Driven Development)  oluşturulur.

Müşteriyle iletişim içerisinde geliştirmeyi sağlar. Müşteri için oluşturduğun projenin tam anlamıyla müşterinin isteklerini karşılayabilmesi için müşteriyle iletişim içinde geliştirme yapılmasıdır. Bakıyorsunuz günümüz projelerindeki en büyük problem proje bittikten sonra müşterinin bu benim istediğim gibi olmamış demesiyle her iki tarafında mağdur olmasıdır. Bu sebeple BDD çok önemlidir. Zaten bu problemden dolayı ayrıca çevik süreçker gelişti, parça parça projede ilerlenerek sürekli müşteri ve teknoloji odaklı testlerle projenin best parctise’e ulaşarak oluşması sağlanmaya çalışılmaktadır. Mesela projenin birinci bölümünü yaptınız müşteriye sundunuz(BDD yaptınız ve eğer mümkünse birinci bölüme başlamadan önce TDD ve bitirdikten sonra Unit testini yapıp daha sonra BDD’sini yapmalısınız ),  daha sonra projenin ikinci bölümü aynı şekilde vs. derken projeyi tamamladınız, çevik süreçleri kullanmayan bir firma kurumsal olduğunu iddia etmekte güçlük çekecektir. Bu süreçler belki başlangıçta işinizi uzatabilir ama uzun vadede size çok büyük bir fayda sağlayacaktır ayrıca kurumunuzun hep müşteri beklentilerine doğru cevap vermesini sağlayarak kalitenizi gösterecektir.

5- Unit Test Oluşturulur, Kodun Kalitesi ve Doğruluğu Ölçülür

Proje yazıldıktan sonra yazılımınızın doğruluğunu başka bir yazılımla test etmenize Unit Test denir, TDD ve BDD’den sonra projenizi Unit Test’e tabi tutmanız gerekmektedir. Unit Test sizin projenizin kalitesini ve doğruluğunu somut olarak sunabilmenizi sağlar. Tabi bu test kodun yazılmasından sonra yapılacağı için daha sonraları yapacağınız bir testtir.

Not : Projenizin ne kadar iyi olduğunu ölçen ve söyleyen yazılımlar mevcuttur, projenizin ve kodunuzun analizini yapar ve size sayısal değerlerle ölçüm sonucunu söylerler sonarqube sizin için örnek verebileceklerimden bir tanesi.

6- Ön Testler ve Değerlendirmelerden sonra kurumsal mimarinin oluşturulması

Ön aşamaları anlattık şimdi üstteki resimde gördüğünüz kurumsal mimarinin oluşumuna değinelim.

1- Veri tabanı, e-r diagramı, uml diagramı, TDD ve BDD aşamalarından sonra oluşturulur.

2- Nitelik Katmanı (Entity Layer) oluşturulur, bu katman veri tabanının niteliklere dönüştürülmüş halidir.

3- Arayüz katmanı, business ve veri katmanları oluşturulur.

Resimdeki mimariyi anlatmaya çalışacak olursam.

Arayüzden gelen veriler business katmanında işlenir ve veri tabanı üzerinden bir veri işlemi yapılacaksa bu veri tekrar business layer’a gönderilir, tüm işlemler business layerde gerçekleştirilir, data katmanının tek görevi business layer’ın istediği verileri göndermektir. Business layer üzerinden veri sunum katmanında gösterilir ayrıca arayüz katmanı üzerinden istenilen metodlar web servis(WCF, SOAP, Rest api vs.) olarak dışarıya açılabilir.

Dependency Injection(Ninject): Arayüz katmanından yapılacak iş taleplerinin farklı teknolojilerde olmasını istemiş ve yapıyı bu şekilde tassarlamış olabilirsiniz, size bu teknoloji bağımsızlığını verecek olan yapı Ninjectdir.

Unit Of Work: Projenizde yaptığınız işlemler birçok aşamalı olabilir ve bu aşamalardan bir tanesinde bir hata oluştuğunda diğer aşamalarda yaptığınız işlemlerin de geri alınması gerekir, Unit Of Work kullanımı veya transaction yönetimi ile bu problemin üstesinden gelebilirsiniz.

Caching: Hepsiburada gibi uygulama veya sitelerin verilerindeki değişim çok nadir olur yani bir ürünü satıyoarlarsa sürekli o ürün satış sayfasında bulunur bu sebeple kullanıcılara ürünleri sunarken veri tabanından değilde bir değişiklik olmamışsa cache bellekten çekerek göstermeye çalışırlar böylelikle hem db yorulmaz hemde kullanıcıya ürün daha çabuk gösterilir.

Logging : Sistemdeki yapılan işlemlerin bir yerde tutulmasıdır, geçmişe yönelik hareketlerin görülebilmesini sağlar.

Validation : Proje üzerinde veri tabanı ve arayüz arasında bir işlem yapılacağı zaman çift yönlü kontrol yapılmasıdır.

Bu yazımda size katmanlı mimaride kullanılan yöntemleri ve kurumsal mimarinin avantajlarını anlatmaya çalıştım.

Bir sonraki yazımda görüşmek üzere.


Write a Message