Back to Blog

Layered Architecture & Monolith

February 4, 20263 min
Layered ArchitectureModular MonolithSoftware Architecture
Layered Architecture & Monolith

Layered Architecture vs Monolith

En çok karıştırılan iki kavram:

  • Monolith → Deployment modeli (nasıl dağıtılıyor?)
  • Layered Architecture → Kod organizasyonu (nasıl yazılıyor?)

Birlikte kullanılabilirler ama aynı şey değildirler.

1. Layered Architecture

Layered Architecture, kodu teknik katmanlara ayırır.

Controller (API / UI)
↓
Service (Business Logic)
↓
Repository (Data Access)
↓
Database

Bu bir mantıksal ayrımdır, deployment ile ilgisi yoktur.

Katmanlar

1. Presentation Layer

  • Controller
  • Routes
  • API endpoints
  • UI ile konuşur

2. Application Layer

  • İş akışını koordine eder
  • Servisleri organize eder
  • Transaction başlatır

3. Business Logic Layer (Domain)

  • Hesaplamalar
  • Kurallar
  • Validasyonlar
  • Sistem davranışı

4. Data Access Layer

  • SQL sorguları
  • ORM işlemleri
  • DB bağlantısı

Layered Architecture Kuralları

✔ Üst katman alt katmanı çağırabilir ❌ Alt katman üst katmanı çağıramaz

Örnek:

  • Controller → Service çağırır
  • Service → Repository çağırır
  • Repository → DB çağırır
  • Repository → Controller çağırmaz

Layered Mimari Sorunu

Aşırı bağımlılık oluşabilir.

Örneğin:

class OrderService {
  constructor(
    private userRepo: UserRepository,
    private productRepo: ProductRepository,
    private paymentService: PaymentService
  ) {}
}

Service her şeyi biliyorsa:

  • God service oluşur
  • Test zorlaşır
  • Bağımlılık artar

Layered teknik ayrım yapar ama domain izolasyonu garanti etmez.

2. Monolith Nedir?

Monolith bir deployment modelidir.

  • Tek process
  • Tek deploy
  • Tek kod tabanı
  • Genelde tek DB

Uygulama tek .jar, .exe, .war ya da tek Node.js app olarak çalışır.

Monolith Özellikleri

✔ Geliştirmesi kolay ✔ Test etmesi kolay ✔ Deployment basit ✔ Debug etmek kolay

  • Tek hata tüm sistemi etkileyebilir
  • Tek özelliği ölçeklemek için tüm sistemi scale etmek gerekir

Modular Monolith

Monolith’in gelişmiş hâlidir.

Burada teknik katman değil, domain bazlı modüller vardır.

/modules
  /order
    order.controller.ts
    order.service.ts
    order.repository.ts
    order.entity.ts

  /user
  /payment

Her modül:

  • Kendi controller’ına sahip
  • Kendi service’ine sahip
  • Kendi repository’sine sahip
  • İçini dışarı açmaz
  • Public API üzerinden iletişim kurar

Layered vs Modular Monolith

ÖzellikLayeredModular Monolith
AyrımTeknikDomain
BağımlılıkKatman bazlıModül bazlı
Karmaşıklık kontrolüOrtaYüksek
Microservice’e geçişZorKolay

Microservice’e Geçmeden Önce

Direkt microservice’e geçmek risklidir.

Önce:

✔ Modular Monolith ✔ Domain sınırları net ✔ Public interface’ler belirli ✔ Bağımlılıklar kontrol altında

Sonra modül koparıp microservice yaparsın.

Monolith vs Layered

ÖzellikMonolithLayered
DeploymentTek uygulamaDeployment ile ilgisi yok
AyrımFizikselMantıksal
ÖlçeklenebilirlikTüm sistemKatman ayrı ölçeklenemez
Hata EtkisiTüm sistemKatman izole edilebilir

Büyük Resim

Monolith = Nasıl deploy ettiğin Layered = Nasıl organize ettiğin Modular Monolith = Domain bazlı organize edilmiş Monolith

Hangi Yapıyı Ne Zaman Kullanmalı?

Küçük Proje

→ Basit Monolith + Layered yeterli


Orta Ölçekli Proje

→ Modular Monolith


Büyük / Yüksek Trafik

→ Modular Monolith → Microservice evrimi

Mimari Evrim

Layered Monolith
↓
Modular Monolith
↓
Microservices

Bu doğal bir evrimdir.