Bu görsel, bir yazılım uygulamasının mimarisini temsil eden bir diyagramdır. Temel olarak, temiz mimari veya hegzagonal mimari olarak bilinen bir yapıyı göstermektedir. Temiz mimari, bir uygulamanın farklı katmanlarını nasıl düzenleyeceğinizi ve bu katmanların birbirleriyle nasıl etkileşimde bulunacağını açıklar. İşte bu mimarinin ana bileşenleri ve bunların işlevleri:
Çekirdek (Core): Uygulamanın kalbidir ve Domain business logic'i içerir. Bu, uygulamanın temel iş kurallarını ve uygulama hizmetlerini tanımlar. Çekirdek, ayrıca Entity'leri ve Aggregate'leri içerir; bunlar iş kurallarını ve uygulama veri modellerini temsil eder. Çekirdek katmanın içindeki her şey uygulamanın temel davranışını tanımlar ve bu katmanın dışındaki herhangi bir şeyle doğrudan etkileşime girmemelidir.
Entity/Aggregate: Bu, uygulamanın iş kurallarını içeren ve genellikle bir veritabanında saklanan verileri temsil eder. Entity'ler benzersiz bir kimliğe sahip olurken, Aggregate'ler ise birden çok Entity veya Value Object'i kapsayabilir.
Uygulama Hizmetleri (Application Services): Bu katman, uygulama akışını yönetir ve Entity'lerle Domain Logic üzerinde işlemler gerçekleştirir.
Portlar ve Adapterlar: Bu yapı, uygulamanın dış dünyayla etkileşim kurmasını sağlar. Portlar, uygulamanın dışarıya açılan noktalarıdır ve genellikle API çağrıları veya veritabanı erişimi gibi girdi/çıktı işlemleri için kullanılır. Adapterlar, dış kaynaklarla (örneğin, veritabanları, web servisleri, e-posta servisleri gibi) etkileşime girer ve bu dış kaynakların uygulamanın iç yapısına entegre edilmesini sağlar.
Altyapı (Infrastructure): Bu katman, uygulamanın teknoloji ve çerçevelerini içerir. Altyapı adapterları, ORM (Object-Relational Mapping) şemaları, veritabanı adapterları ve dış kaynak adapterları gibi farklı teknolojilere ait bileşenlerden oluşur.
Arayüz Adapteerleri (Interface Adapters): Bu, kullanıcı arayüzleri, veri transfer objeleri (DTO'lar), kontrol cihazları ve sunumcuları içeren katmandır. Kullanıcıların ve diğer sistemlerin uygulamayla etkileşimde bulunmasını sağlar.
HTTP API'si ve DTO Kontrolleri: Bu, dış sistemlerin veya kullanıcıların uygulama ile HTTP protokolü üzerinden iletişime geçtiği arayüzlerdir.
Sunucular (Presenters) ve CLI Kontrolleri: Kullanıcıya görsel çıktı sunan veya komut satırı arayüzü üzerinden etkileşimi sağlayan bileşenlerdir.
Veritabanı (DB): Uygulamanın verilerini saklayan ve genellikle SQL (PostgreSQL, MySQL) veya NoSQL (MongoDB gibi) teknolojilerini kullanarak erişilen depodur.
Diyagram ayrıca, çeşitli kullanıcı tiplerini (son kullanıcılar, teknik kullanıcılar ve tüketici sistemler) ve uygulamanın farklı bileşenleri arasındaki etkileşim akışlarını göstermektedir. Bu etkileşimler arasında komutlar, olaylar, sorgular ve mesajlar bulunmaktadır. Diyagram, uygulama mimarisinin modüler ve esnek olmasını sağlamak için tasarlanmıştır, böylece farklı katmanlar arasındaki bağımlılıklar azaltılır ve uygulamanın genişletilebilirliği artırılır.
Diyagramdaki detaylara daha derinlemesine bakarsak:
Domain Services: Bu, bir veya birden fazla Entity arasında ya da Entity ve Value Object'ler arasındaki domain mantığını yürütür. Bunlar, çekirdek iş mantığını gerçekleştiren ve genellikle çekirdek iş kurallarının bulunduğu servislerdir.
Value Objects: Bunlar, genellikle bir Entity veya Aggregate ile ilişkili değerleri temsil eder ve bu değerlere iş mantığı uygulayan nesnelerdir. Value Objects'lerin kendilerine ait bir kimliği yoktur ve genellikle değiştirilemezlerdir.
Event Controllers ve CLI Controllers: Bunlar, kullanıcı eylemlerini ve sistem olaylarını yakalayan ve bunlara yanıt veren bileşenlerdir. Örneğin, bir kullanıcı bir form gönderdiğinde veya bir zamanlayıcı bir olay tetiklediğinde bu kontrolörler devreye girer.
External Events: Bu, uygulamanın dış dünyadan gelen olaylara tepki vermesi gerektiğinde kullanılır. Örneğin, bir kullanıcının bir aksiyonu veya bir mikroservisten gelen bir mesaj gibi.
Database Adapters: Bunlar, uygulamanın veritabanı ile etkileşimini yönetir. ORM şemaları ve veritabanı sorguları bu katmanda yer alır.
External Resource Adapters: Uygulamanın e-posta servisleri, SMS servisleri ve üçüncü taraf API'leri gibi dış kaynaklarla etkileşimini sağlar.
Microservices Adapters ve Message Queue: Bu, uygulamanın mikroservis mimarisine entegre olmasını ve asenkron mesajlaşmayı destekler.
Diyagramın genel yapısı, farklı katmanların birbirinden bağımsız çalışmasını ve bu sayede geliştirme, bakım ve ölçeklendirme işlemlerinin kolaylaştırılmasını amaçlar. İlişkisel veritabanlarından mikroservislere, CLI araçlarından web arayüzlerine kadar tüm bileşenlerin birbiriyle nasıl etkileşime gireceğini anlamak için diyagram detaylı bir rehber sağlar.
Diyagramın sağladığı bu yapının, yazılım geliştiricilerine, sistem mimarlarına ve teknik proje yöneticilerine hitap ettiğini ve karmaşık uygulama mimarilerini planlamalarında onlara yardımcı olacak bir çerçeve sunduğunu da belirtmek önemlidir. Bu mimari, özellikle büyük ve karmaşık sistemlerde, sistemin daha yönetilebilir, esnek ve ölçeklenebilir olmasını sağlamak için kullanılır.
Diyagramın etrafındaki renkli alanlar ve onlar arasındaki akışlar, çeşitli katmanlar ve bileşenler arasında veri ve komut akışını temsil eder. İşte bu akışların bazı detayları:
Kırmızı Oklar (Commands): Kullanıcıların veya sistemlerin eylemlerini temsil eder. Bu komutlar, uygulama tarafından alınır ve çekirdek katman içinde işlenir. Örneğin, bir kullanıcı bir formu gönderdiğinde bu bir komut oluşturabilir.
Yeşil Oklar (Queries): Sistemden veri talep etmek için kullanılır. Bu sorgular, çekirdek katmandaki verileri okur ve kullanıcı arayüzüne sunar.
Mavi Oklar (DTO - Data Transfer Objects): Katmanlar arası veri transferini temsil eder. Bu nesneler, katmanlar arası iletişimde kullanılan veri yapılarıdır ve genellikle veritabanı kayıtlarından alınan verileri kullanıcı arayüzüne uygun biçimde dönüştürmek için kullanılır.
Port ve Adapter Mekanizması: Bu mekanizma, çekirdek katmanın dış dünyadan soyutlanmasını sağlar. Portlar, dış dünya ile çekirdek katman arasında bir arayüz görevi görür ve adapterlar, bu portlardan gelen veya bu portlara giden veri akışını yönetir.
Altın Sarısı Çizgiler (Infrastructure Adapters): Bu çizgiler, altyapı katmanının çeşitli bileşenleri arasındaki etkileşimleri gösterir. Örneğin, bir veritabanı adapterının bir ORM şemasıyla nasıl etkileşime girdiğini temsil eder.
Turuncu Alan (Application Services): Uygulamanın iş mantığını orkestra eden ve dış dünya ile etkileşimi sağlayan servisler burada konumlandırılmıştır.
Mavi Alan (Entities/Aggregates): Çekirdeğin merkezinde yer alan bu alan, iş mantığı ve veri modellerini içeren nesneleri temsil eder.
Yeşil Alan (Interface Adapters): Kullanıcı arayüzleri, komut satırı arayüzleri ve diğer giriş/çıkış bileşenlerinin bulunduğu katmandır.
Diyagramın genel mantığı, uygulamanın esnek ve modüler bir yapıda olmasını sağlamak, böylece farklı katmanlar ve bileşenler arasındaki bağımlılıkları en aza indirgemektir. Bu yaklaşım, yazılımın bakımını ve güncellemelerini kolaylaştırır, ayrıca yeni özelliklerin veya bileşenlerin entegrasyonunu basitleştirir.
Sonuç olarak, bu diyagramın temsil ettiği mimari, yazılım geliştirme süreçlerinde sağlam ve sürdürülebilir uygulamalar oluşturmanın yanı sıra, iş ve veri akışını düzenleyerek karmaşık sistemlerin yönetilmesine olanak tanıyan bir yapı sunar. Bu yaklaşım, özellikle büyük ölçekli ve uzun vadeli projelerde tercih edilir, çünkü sistemin farklı bölümlerinin bağımsız olarak geliştirilmesine, test edilmesine ve dağıtılmasına imkan tanır.
Örnek uygulama koduna buradan ulaşabilirisiniz.