# Katmanlı Mimari

Adres: https://softwaredictionary.org/tr/terimler/layered-architecture
Kategori: Yazılım Mimarisi
Son güncelleme: 2026-09-30
İngilizcesi: Layered Architecture
Okunuşu: leyırd arkitekçır

Kısaca: Katmanlı mimari, uygulamayı sunum, iş mantığı ve veri erişimi gibi yatay katmanlara böler ve her katman yalnızca altındaki katmanı çağırır.

## Katmanlı mimari nedir?

Katmanlı mimari, bir uygulamayı yapılandırmanın en eski ve en yaygın yollarından biridir. Kod, her biri tek tür sorumluluğa sahip, üst üste dizilmiş yatay katmanlara bölünür. Tipik bir web uygulamasında HTTP isteklerini ya da kullanıcı arayüzünü yöneten bir sunum katmanı, alanın kurallarını uygulayan ve çoğunlukla servis katmanı denen bir iş mantığı katmanı ve veritabanını okuyup yazan bir veri erişim katmanı bulunur.

Temel kural, bağımlılıkların aşağıya doğru işaret etmesidir: bir katman hemen altındaki katmanı çağırabilir ama asla yukarı doğru çağırmamalıdır. Katı (kapalı) bir katmanlı tasarımda her istek sırayla her katmandan geçer, gevşek (açık) tasarım ise bazı çağrıların bir katmanı atlamasına izin verir. Her katman ayrıntılarını net bir arayüzün arkasında gizlediği için veri nasıl saklanıyor ya da sayfalar nasıl oluşturuluyor bunu iş kurallarını yeniden yazmadan değiştirebilir, geliştiriciler de belirli bir kod türünün nereye ait olduğunu her zaman bilir.

Restoran iyi bir benzetmedir: garsonlar önde sipariş alır, aşçılar mutfakta yemeği hazırlar ve depo malzeme sağlar. Garson doğrudan depoya gitmez ve depo müşterilerle konuşmaz. Katmanlı mimari birçok kurumsal ve web uygulamasının ve birçok framework başlangıç şablonunun varsayılan biçimidir; bir monolit için makul bir başlangıç noktasıdır.

Katmanlı mimari sıklıkla clean ve hexagonal architecture ile karşılaştırılır. Klasik katmanlı tasarımda iş mantığı veri erişim katmanına bağımlıdır, dolayısıyla veritabanı ayrıntıları yukarıya sızabilir; clean ve hexagonal architecture ise bu bağımlılığı tersine çevirir, böylece çekirdek arayüzleri tanımlar ve veritabanı kodu onlara takılır. MVC'den de farklıdır, çünkü MVC sunum katmanının kendisini düzenler; ayrıca kodun mantıksal bir gruplaması olan katman (layer), ayrı bir fiziksel makine ya da süreç olan tier ile aynı şey değildir.

## Önemli noktalar

- Kod; sunum, iş mantığı ve veri erişimi gibi yatay katmanlara bölünür.
- Her katman yalnızca altındaki katmana bağımlıdır.
- Katmanlar sorumlulukları netleştirir ve parçaların bağımsız değişmesini sağlar.
- Klasik katmanlamada iş mantığı veri erişimine bağımlıdır; clean ve hexagonal architecture bunu tersine çevirir.
- Katmanlar (layer) kodun mantıksal gruplarıdır; tier'lar ise fiziksel dağıtımlardır.

## Örnek: Küçük bir sipariş özelliğinin üç katmanı

```typescript
// Data access layer: the only code that talks to the database
const orderRepository = { insert: (order: object) => db.insert("orders", order) };

// Business logic layer: applies the rules, then calls the layer below
const orderService = {
  async placeOrder(items: string[]) {
    if (items.length === 0) throw new Error("An order needs at least one item");
    return orderRepository.insert({ items, status: "placed" });
  },
};

// Presentation layer: handles HTTP and calls the business layer
app.post("/orders", async (req, res) => {
  res.status(201).json(await orderService.placeOrder(req.body.items));
});
```

## Sık sorulan sorular

**Katman (layer) ile tier arasındaki fark nedir?**

Katman, iş mantığı katmanı gibi bir uygulamanın içindeki mantıksal bir kod gruplamasıdır. Tier ise üç katmanlı (three-tier) bir sistemdeki tarayıcı, uygulama sunucusu ve veritabanı sunucusu gibi fiziksel bir dağıtım birimidir; dolayısıyla birkaç katman tek bir tier'da çalışabilir.

**Katmanlı mimari ile clean architecture arasındaki fark nedir?**

İkisi de sorumlulukları ayırır ama bağımlılıkları farklı yönde işaret eder. Katmanlı mimaride iş mantığı veri erişim katmanına bağımlıdır; clean architecture'da ise iş çekirdeği hiçbir şeye bağımlı değildir ve veritabanı kodu, çekirdeğin tanımladığı arayüzleri uygular.

**Architecture sinkhole anti-pattern'i nedir?**

İsteklerin çoğunun, yalnızca bir repository metodunu çağıran bir servis metodu gibi, gerçek bir mantık içermeden katmanlardan doğrudan geçmesi durumudur. Bunun biraz olması normaldir ama her yerdeyse katmanlar değer katmadan tören ekler.

---

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