Modern Yazılım Geliştirme için Hexagonal (Ports and Adapters) Mimari

Şahin Bölükbaşı
4 min readFeb 12, 2024

--

Yazılım geliştirme sürecinde, uygulamanın tasarımı ve yapılandırılması, uzun vadeli sürdürülebilirlik ve esneklik için son derece önemlidir. Hexagonal mimarisi veya Ports and Adapters pattern, bu ihtiyaçları karşılamak için etkili bir yöntem sunar. Bu yazıda, hexagonal yapıyı detaylı olarak inceleyeceğiz ve nasıl uygulanabileceğini anlatmaya çalışacağım.

Hexagonal Yapı Nedir?

Hexagonal yapı, yazılım uygulamalarının içsel işlevlerini ve dış dünya ile olan etkileşimlerini düzenlemek için kullanılan bir mimari tasarım yaklaşımıdır. Bu yaklaşım, bir uygulamanın çekirdeğini, dış dünya ile iletişimini yöneten bağlantı noktaları (ports) ve dış kaynaklara bağımlılıkları kapsayan adaptörlerden (adapters) oluşan altıgen bir yapıya benzetilir.

Hexagonal yapı, yazılım uygulamalarının esnekliğini, sürdürülebilirliğini ve test edilebilirliğini artırmak için tasarlanmıştır. Temel prensipleri arasında iş mantığının ve dış kaynakların birbirinden ayrılması, dış dünya ile olan etkileşimlerin bağımsız hale getirilmesi ve kodun test edilebilirliğinin sağlanması bulunur.

Hexagonal Yapının Bileşenleri

Domain Model (Alan Modeli)

Uygulamanın temel iş mantığını ve kurallarını temsil eder. Genellikle nesneler ve işlevler şeklinde ifade edilir. Bu bileşen, uygulamanın çekirdeğini oluşturur ve dış dünya ile doğrudan iletişim kurmaz. İş mantığı kurallarını içerir ve genellikle iş süreçlerini yönetir.

Ports (Bağlantı Noktaları)

Dış dünya ile etkileşim sağlayan arayüzlerdir. Bu bağlantı noktaları, kullanıcı arayüzleri, dış API’ler, veritabanı bağlantıları gibi çeşitli iletişim kanallarını içerebilir. Ports, genellikle arayüzler veya soyut sınıflar şeklinde tanımlanır ve uygulama mantığı ile dış kaynaklar arasında bir köprü görevi görür.

Adapters (Adaptörler)

Ports’a bağlı olan ve dış kaynaklarla etkileşimi yöneten yapılar. Dış kaynaklarla iletişim kurmak için kullanılır ve dış dünya ile arayüz sağlar. Örneğin, bir veritabanı adaptörü, veritabanı ile iletişim kurar ve işlemleri gerçekleştirir. Adaptörler, dış kaynakların uygulama içinde kullanılabilir hale gelmesini sağlar ve bu kaynaklara olan bağımlılığı en aza indirir.

Uygulama Mantığı (Application Logic)

Ports ve Domain Model arasında köprü görevi görür. Gelen istekleri işleyen ve Domain Model üzerinde işlemler gerçekleştiren bileşenlerdir. Bu bileşenler, uygulamanın iş mantığını uygular ve kullanıcı isteklerine yanıt verir. Ports aracılığıyla dış dünyaya erişir ve Domain Model ile etkileşime girer.

Hexagonal Yapının Avantajları

  • Hexagonal yapı, bileşenler arasındaki bağımlılıkları en aza indirir ve her bir bileşeni birbirinden bağımsız hale getirir. Bu, uygulamanın farklı parçalarının kolayca değiştirilmesini ve yeniden kullanılmasını sağlar.
  • Bu yapı, uygulamanın içsel işlevlerini ve dış dünya ile etkileşimlerini ayrı tutarak esnek bir tasarım sağlar. Bu, uygulamanın gereksinimlere daha kolay ve hızlı bir şekilde adapte olmasını sağlar.
  • Hexagonal yapı, bileşenlerin birbirinden bağımsız olmasını sağlar, bu da kodun test edilmesini kolaylaştırır. Her bir bileşenin ayrı ayrı test edilmesi, yazılımın daha güvenilir olmasını sağlar.
  • Modüler tasarım sayesinde, hexagonal yapıdaki bileşenlerin yeniden kullanılması kolaylaşır. Bu, uygulama geliştirme sürecini hızlandırır ve kodun daha az tekrar edilmesini sağlar.
  • Hexagonal yapı, dış kaynaklarla etkileşimin adaptörler aracılığıyla sağlanmasıyla, uygulamanın dış kaynaklara bağımlılığını azaltır. Bu, uygulamanın dış kaynaklardan bağımsız hale gelmesini sağlar ve daha kolay bir şekilde değiştirilmesini sağlar.
  • Modüler tasarım ve bağımsız bileşenler, uygulamanın ölçeklenmesini kolaylaştırır. Her bir bileşenin ayrı ayrı ölçeklendirilmesi mümkündür, bu da uygulamanın büyüdükçe performansını korumasını sağlar.
  • Hexagonal yapı, kodun daha düzenli ve anlaşılır olmasını sağlar. Bileşenlerin birbirinden bağımsız olması, bakım ve güncelleme süreçlerini daha kolay hale getirir.

Örnek Uygulama

Diyelim ki bir kitap yönetim uygulaması geliştirmek istiyorsunuz ve bu uygulamanın hexagonal mimari prensiplerine göre tasarlanmasını istiyorsunuz. İşte adımlar:

1. Domain Modelin Tanımlanması

İlk adım olarak, kitaplar, yazarlar, yayınevleri gibi temel iş mantığı nesnelerini tanımlayın. Bu, uygulamanın çekirdeğini oluşturacak olan Domain Modeldir.

2. Ports’ların Belirlenmesi

Uygulamanızın dış dünya ile etkileşim kuracağı arayüzleri belirleyin. Örneğin, kullanıcı arayüzü için bir Web API ve bir admin paneli, dış API’lerle etkileşim için bir entegrasyon portu, veritabanına erişim için bir veritabanı portu gibi.

3. Adapters’ların Oluşturulması

Her bir port için uygun adaptörleri oluşturun. Örneğin, Web API için bir HTTP adaptörü, veritabanı için bir veritabanı adaptörü, dış API’ler için bir API adaptörü vb. Her bir adaptör, ilgili portun arayüzünü uygulayacak ve gerçek etkileşimi sağlayacaktır.

4. Uygulama Mantığının Uygulanması

Uygulamanın iş mantığını ve uygulama akışını belirleyin. Kullanıcıların kitap eklemesi, listelemesi, güncellemesi ve silmesi gibi temel işlemleri bu adımda uygulayın. Bu iş mantığı, Domain Model içinde yer alacaktır.

5. Bağlantıların Yapılması

Portlar ve adaptörler arasındaki bağlantıları kurun. Örneğin, Web API adaptörü, gelen HTTP isteklerini işleyip uygun Domain Model işlemlerini çağırarak uygulama mantığını çalıştıracaktır.

6. Testlerin Yazılması

Her bir bileşenin ayrı ayrı test edilebilir olduğundan emin olun. Domain Model için unit testler, adaptörler için entegrasyon testleri ve portların doğru şekilde çalıştığını kontrol eden testler yazın.

Bu adımları takip ederek, hexagonal yapıya dayalı bir kitap yönetim uygulaması geliştirebilirsiniz. Bu şekilde, uygulamanızın esnek, sürdürülebilir ve test edilebilir olmasını sağlayabilirsiniz.

Sonuç

Hexagonal (Ports and Adapters) mimarisi, modern yazılım geliştirme projelerinde sıklıkla tercih edilen bir mimari tasarım yaklaşımıdır. Modüler bir yapı, esneklik, test edilebilirlik ve dış bağımlılıkların azaltılması gibi bir dizi avantaj sunar. Doğru bir şekilde uygulandığında, hexagonal yaklaşımı, yazılım projelerinin başarılı olmasını sağlayabilir ve uzun vadede bakım maliyetlerini azaltabilir. Bu nedenle, yazılım geliştirme sürecinde hexagonal yapıya odaklanmak, projenin başarısını artırabilir ve daha kaliteli bir ürün ortaya çıkarmaya yardımcı olabilir.

--

--