Grafik, çeşitli yazılım mimarisi stillerini gösteren renkli ve ayrıntılı bir infografiktir. Çeşitli mimari stiller, ortada "Yazılım Mimarisi Stilleri" başlığı altında dairesel bir düzende gruplandırılmıştır. Her stilin kısa açıklamaları ve örnek diyagramlarla temsil edildiği birkaç bölüme ayrılmıştır.
İnfografikte yer alan bazı mimari stiller şunlardır:
1. CQRS Mimarisı (Command Query Responsibility Segregation)
CQRS, komutları (yazma işlemleri) ve sorguları (okuma işlemleri) ayıran bir yazılım mimari desenidir. Bu yaklaşım, veri modelinin yazma ve okuma yönleri arasında net bir ayrım yapılmasına olanak tanır, böylece her biri farklı şekilde optimize edilebilir. Örneğin, bir e-ticaret sistemi, sipariş işleme (komut) ve ürün listeleme (sorgu) işlemleri için farklı modeller ve hizmetler kullanabilir. CQRS, genellikle olay kaynaklı sistemlerde ve mikroservis mimarilerinde kullanılır, çünkü okuma ve yazma işlemleri için farklı model ve veri depolama gereksinimlerine izin verir.
Senaryo: Büyük e-ticaret platformları, kullanıcıların sipariş verme (yazma) ve ürün arama (okuma) işlemleri için yüksek performans ve ölçeklenebilirlik gerektirir.
Örnek: Bir online alışveriş sistemi, müşteri siparişlerini işlemek için ayrı bir hizmet (komut servisi) ve ürün katalogunu sorgulamak için başka bir hizmet (sorgu servisi) kullanır.
Teknolojiler: Event Sourcing, Kafka, Azure Event Hubs, CQRS Frameworks (AxonIQ, Eventuate)
2. Katmanlı (n-katman) Mimari
Katmanlı mimari, yazılımı ayrı katmanlara böler. Her katman belirli bir görevi yerine getirir ve genellikle bir alt katmana hizmetler sunar. Tipik olarak, bu mimari en azından bir sunum katmanı (kullanıcı arayüzü), iş katmanı (iş kuralları), kalıcılık katmanı (veri erişimi) ve veritabanı katmanını (veri depolama) içerir. Bu mimari, geliştirme ve bakımı kolaylaştırır, çünkü her katman bağımsız olarak geliştirilebilir ve güncellenebilir.
Senaryo: Kurumsal uygulamalar, iş süreçlerini yönetmek, veri erişimi sağlamak ve kullanıcı arayüzleri sunmak için ayrı katmanların ayrılmasını gerektirir.
Örnek: Bir CRM (Müşteri İlişkileri Yönetimi) yazılımı, kullanıcı işlemlerini, iş mantığını ve veritabanı işlemlerini ayrı katmanlarda işler.
Teknolojiler: .NET Framework, Java EE, Spring, Laravel
3. Mikro Hizmet Mimarisı
Mikro hizmet mimarisi, bir uygulamayı bağımsız olarak dağıtılabilir ve yönetilebilir küçük servisler olarak tasarlar. Her mikro hizmet belirli bir işlevi yerine getirir ve genellikle kendi veri modeli ve veritabanı ile birlikte çalışır. Bu yaklaşım, büyük ve karmaşık sistemlerin yönetimini kolaylaştırır, çünkü her bir servis ayrı ayrı ölçeklendirilebilir ve güncellenebilir. Ayrıca, farklı mikro hizmetler farklı programlama dillerinde veya farklı teknoloji yığınları kullanılarak geliştirilebilir.
4. Mikrokernel Mimarisı (Plug-in Mimari)
Mikrokernel mimarisi, temel bir işlevsel çekirdek ve onun etrafında yer alan genişletilebilir ve müşteriye özgü bileşenleri ayırır. Bu çekirdek, sistemin temel işlevlerini yönetirken, diğer özellikler ve fonksiyonlar eklentiler (plug-in'ler) veya modüller aracılığıyla eklenir. Bu mimari, uygulamaların esnekliğini ve genişletilebilirliğini artırır ve özellikle uygulama çekirdeğinin değişmeden kalması gereken durumlarda kullanışlıdır.
Senaryo: Büyüyen ve sürekli değişen iş gereksinimlerine hızlıca yanıt vermek isteyen internet şirketleri için idealdir.
Örnek: Bir video streaming servisi, kullanıcı yönetimi, video işleme ve öneri motoru gibi farklı işlevleri bağımsız mikro hizmetler olarak çalıştırabilir.
Teknolojiler: Docker, Kubernetes, RabbitMQ, Spring Boot, MicroProfile
5. Event-Driven Mimari (EDA)
Etkinlik odaklı mimari, etkinliklerin üretimini, tespitini, tüketimini ve bunlara tepkiyi temel alır. Bu mimariye göre, uygulama bileşenleri arasındaki iletişim, etkinlikler (event) aracılığıyla gerçekleşir. Bu etkinlikler genellikle bir olay aracısı (event broker) veya mesaj kuyruğu üzerinden yayılır. EDA, yüksek derecede ölçeklenebilir ve esnek sistemler oluşturmak için kullanılır ve özellikle asenkron işlemleri yönetmede etkilidir.
Senaryo: Gerçek zamanlı veri işleme ve asenkron işlemler için idealdir, özellikle de olayların ve mesajların sistem genelinde hızlı bir şekilde iletilmesi gerektiğinde.
Örnek: Bir finansal işlem sistemi, hisse senedi fiyat değişikliklerini izleyerek ve olaylara dayalı olarak otomatik alım-satım kararları alabilir.
Teknolojiler: Apache Kafka, RabbitMQ, AWS Lambda, Azure Functions
6. DDD Mimarisı (Domain-Driven Design)
Domain-Driven Design (DDD), karmaşık yazılım sistemlerinin tasarımında ve geliştirilmesinde, iş süreçlerinin ve kurallarının yazılımın temelini oluşturduğu bir yaklaşımdır. Bu yaklaşımda, iş alanı (domain) uzmanları ve yazılım geliştiricileri yakın işbirliği içerisinde çalışarak, iş süreçlerini en iyi yansıtan ve iş kurallarını uygulayan bir model oluştururlar. DDD, alan modeli, uygulama katmanı, altyapı katmanı ve arayüz katmanı olmak üzere dört ana katmandan oluşur. Bu mimari, iş problemlerinin karmaşıklığını ve teknik çözümlerin nasıl uygulanacağını anlamada önemli bir rol oynar.
Senaryo: İş kurallarının karmaşık olduğu ve iş süreçlerinin yazılım üzerinde doğrudan bir etki yaptığı kurumsal uygulamalar.
Örnek: Bir bankacılık sistemi, kredi onayı, faiz hesaplama gibi iş süreçlerini temsil eden zengin bir alan modeli üzerine kurulabilir.
Teknolojiler: Spring Framework, Hibernate, Entity Framework, Domain-Driven Design Libraries
7. Space-Based Mimari
Space-Based Architecture (SBA), genellikle “Cloud Architecture” veya “Grid Architecture” olarak da adlandırılır ve özellikle büyük veri hacimleri ve yüksek kullanıcı sayılarıyla başa çıkmak için tasarlanmıştır. Bu mimari, veri tutarlılığı, esneklik ve büyük ölçekli dağıtılmış sistemler için ölçeklenebilirlik gibi zorlukların üstesinden gelmek için veri ve işlem yükünü birden çok sunucu veya düğüm arasında dağıtır. SBA, işlem birimleri, sanal orta katman ve veri kılavuzları gibi bileşenlerden oluşur ve her bir işlem birimi, gelen istekleri bağımsız olarak işleyebilir. Bu yapı, sistem kesintilerine ve performans darboğazlarına karşı dayanıklılık sağlar.
Senaryo: Yüksek hacimli veri işleme ve büyük kullanıcı kitlesiyle çalışan sistemler, örneğin sosyal medya platformları veya MMO (Çok Oyunculu Online) oyunlar.
Örnek: Bir sosyal ağ uygulaması, kullanıcı içeriğini hızlı bir şekilde işlemek ve büyük miktarda kullanıcı etkileşimini desteklemek ve saklamak için space-based mimari kullanabilir. Örneğin, kullanıcı gönderileri ve etkileşimleri gibi yüksek oranda değişken veriler, hızlı erişim ve ölçeklenebilirlik için dağıtılmış bir veri kılavuzu üzerinde işlenebilir.
Teknolojiler: GigaSpaces, Apache Ignite, Redis, Hazelcast
8. MVP Mimarisı (Model-View-Presenter)
Model-View-Presenter (MVP) mimarisi, Model-View-Controller (MVC) mimarisinin bir varyasyonudur ve temelde üç bileşeni vardır: Model, View ve Presenter. Model, veri ve iş kurallarını yönetir; View, kullanıcı arayüzünü (UI) temsil eder; ve Presenter, Model ile View arasında bir köprü görevi görerek, kullanıcı girişini işler ve Model verilerini View’a aktarır. MVP, özellikle test edilebilirlik ve kullanıcı arayüzü ile iş mantığı arasındaki sıkı bağların gevşetilmesi için kullanılır. Genellikle masaüstü ve mobil uygulamaların yanı sıra web uygulamalarında da kullanılır.
Senaryo: Kullanıcı arayüzünün ve iş mantığının sıkı bir şekilde ayrılması gerektiğinde, örneğin test edilebilir ve bakımı kolay mobil ve masaüstü uygulamaları için.
Örnek: Bir mobil uygulama, kullanıcı arayüzü (View), kullanıcı etkileşimlerini işleyen (Presenter) ve veri mantığını (Model) yöneten bir yapıya sahip olabilir. Bu sayede, kullanıcı arayüzü değişikliklerinden bağımsız olarak iş mantığı ve veri yönetimi güncellenebilir.
Teknolojiler: Android SDK, iOS Cocoa Touch, MVP Frameworks (Moxy, Mosby)
Her bir mimari stilin kendine özgü avantajları ve kullanım senaryoları vardır. Seçilen mimari genellikle projenin gereksinimlerine, ekip büyüklüğüne, beklentilere ve önceden var olan sistemlerle entegrasyona bağlı olarak belirlenir. Her bir mimariyi uygulamak için belirli desenler, yöntemler ve en iyi uygulamalar vardır ve bu da kendi başına derinlemesine bir konu oluşturur.