# Hexagonal Architecture (Altıgen Mimari)

Adres: https://softwaredictionary.org/tr/terimler/hexagonal-architecture
Kategori: Yazılım Mimarisi
Son güncelleme: 2026-09-30
Okunuşu: heksegınıl arkitekçır

Kısaca: Hexagonal architecture, çekirdek iş mantığının dış dünyayla yalnızca portlar ve değiştirilebilir adaptörlerle konuştuğu bir yazılım yapılandırma yöntemidir.

## Hexagonal architecture nedir?

Ports and adapters olarak da bilinen hexagonal architecture, Alistair Cockburn tarafından 2005'te tanımlanmıştır. Uygulamanın çekirdeğini, yani iş kurallarını merkeze koyar ve veritabanları, web framework'leri, mesaj kuyrukları ve üçüncü taraf API'ler gibi diğer her şeyi dış ayrıntı olarak ele alır. Çekirdek bu ayrıntılara asla doğrudan bağımlı değildir; onlar çekirdeğe takılır.

Çekirdek, neye ihtiyaç duyduğunu ya da neyi sunduğunu tanımlayan arayüzler olan portları belirler; örneğin `save` metodu olan bir `OrderRepository` ya da `charge` metodu olan bir `PaymentGateway`. Adaptörler ise bir portu belirli bir teknolojiye bağlayan somut uygulamalardır: bir SQL veritabanı adaptörü, testler için bellek içi bir adaptör, bir REST controller ya da komut satırı arayüzü. HTTP controller gibi sürücü (driving) adaptörler çekirdeği çağırır; veritabanı repository'si gibi sürülen (driven) adaptörleri ise çekirdek çağırır.

USB-C ve HDMI gibi standart portları olan bir dizüstü bilgisayar düşünün. Cihaz porta uyduğu sürece bilgisayar hangi monitörü ya da klavyeyi taktığınızı umursamaz. Aynı şekilde, birim testlerde gerçek bir veritabanını bellek içi sahte bir sürümle veya bir e-posta sağlayıcısını başka biriyle iş mantığına dokunmadan değiştirebilirsiniz.

Hexagonal architecture sıklıkla katmanlı mimari ve clean architecture ile karıştırılır. Klasik katmanlı tasarım sunum, iş ve veri katmanlarını üst üste yığar ve iş katmanı çoğunlukla doğrudan veri katmanına bağımlıdır; hexagonal architecture ise bu bağımlılığı arayüzlerle tersine çevirir, böylece tüm bağımlılıklar içeriye, çekirdeğe doğru işaret eder. Clean architecture ve onion architecture aynı fikri daha fazla adlandırılmış halkayla geliştirir; dolayısıyla rakip değil, yakın akrabadırlar. Altıgen şeklin kendisinin özel bir anlamı yoktur; yalnızca birkaç port çizmek için yer bırakır.

## Önemli noktalar

- İş mantığı merkezde durur ve framework'ler ile veritabanları hakkında hiçbir şey bilmez.
- Portlar çekirdeğin tanımladığı arayüzlerdir; adaptörler bunları belirli teknolojiler için uygular.
- Tüm bağımlılıklar içeriye, çekirdeğe doğru işaret eder.
- Adaptörleri değiştirmek, sahtelerle test etmeyi ve teknolojileri değiştirmeyi kolaylaştırır.
- Clean architecture ile yakından ilişkilidir ve dependency inversion'a dayanır.

## Örnek: Bir port, çekirdek mantık ve bir adaptör

```typescript
type Order = { id: string; total: number };
// Port: defined by the core, knows nothing about databases
interface OrderRepository { save(order: Order): Promise<void>; }

// Core logic depends only on the port
async function placeOrder(repo: OrderRepository, order: Order) {
  if (order.total <= 0) throw new Error("Order total must be positive");
  await repo.save(order);
}

// Adapter: one concrete implementation, easy to swap for a SQL version
class InMemoryOrderRepository implements OrderRepository {
  orders: Order[] = [];
  async save(order: Order) { this.orders.push(order); }
}
```

## Sık sorulan sorular

**Neden hexagonal architecture deniyor?**

Ad, Alistair Cockburn'ün kullandığı diyagramdan gelir: uygulama bir altıgen olarak, portlar ise kenarlarında çizilmiştir. Altı sayısının bir anlamı yoktur; şekil yalnızca birkaç port ve adaptör için yer bırakır.

**Hexagonal architecture ile clean architecture arasındaki fark nedir?**

İkisi de iş mantığını framework'lerden bağımsız tutar ve bağımlılıkları içeriye doğru işaret ettirir. Hexagonal architecture çekirdeğe ve portlar ile adaptörlere odaklanırken, clean architecture çekirdeğin içine entity ve use case gibi daha fazla adlandırılmış katman ekler.

**Hexagonal architecture ne zaman değerlidir?**

Belirli framework'lerden, veritabanlarından ya da entegrasyonlardan daha uzun ömürlü olması gereken anlamlı iş mantığına sahip ve güçlü otomatik testlere ihtiyaç duyan uygulamalarda karşılığını verir. Küçük bir betik ya da basit bir CRUD uygulaması için ek arayüzler değerinden fazla tören ekleyebilir.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
