ViraStack
  • Akademi
  • Hakkında
  • Destek
Genel BakışKaynaklarKatkı
ViraStack

Frontend ekosistemi: ücretsiz rehberler, proje şablonları, AI kuralları ve form bileşenleri.

Ürünler

  • ViraStack Start
  • ViraStack AI
  • ViraStack Mask
  • ViraStack Password
  • ViraStack Guide

Keşfet

  • Akademi
  • Hakkında
  • Marka
  • Destek

© 2026 ViraStack.

Açık kaynak · MIT

Mimari ve Ölçeklenebilirlik

05 / 13

Domain odaklı frontend

DDD'den frontend'e ne alınır: ortak dil ve bağlam sınırları.

Domain-Driven Design (DDD) adını Eric Evans'ın 2003 tarihli kitabından aldı. Martin Fowler onu şöyle özetler: geliştirme, alanın süreçlerini ve kurallarını yakalayan bir modeli programlamak etrafında döner.1 Çoğu frontend projesi için kitabın tamamı gerekmez. İki fikir işe yarar: ortak dil ve bağlam sınırları.

Ortak dil

DDD, alanın terimlerini yazılımın içine gömmeyi vurgular. Bu dile ubiquitous language denir.1 Frontend'de karşılığı basit: ürün ekibinin "sipariş" dediği şeye tasarımda, API'de ve kodda aynı ad verilir.

Aynı kavramın üç adı olması yaygın bir sorundur: tasarımda "sipariş", API'de purchase, kodda Txn. Her yeni gelen çeviri yapmak zorunda kalır. Önerilen alışkanlık, ürün sözlüğünü tek yerde tutmak ve tip, component ve klasör adlarını oradan almaktır. Bu öneri bu rehbere aittir.

Bağlam sınırları

Fowler'ın örneğinde bir elektrik şirketinde "meter" kelimesi şebekeyle bir konum arasındaki bağlantıyı, şebekeyle bir müşteri arasındaki bağlantıyı ya da fiziksel cihazı anlatabilir. "Customer" ve "Product" gibi kelimelerde de aynısı olur.2 Evans'a göre büyük bir sistemin alan modelini tamamen birleştirmek mümkün ya da uygun maliyetli değildir. DDD sistemi bağlamlara (bounded context) böler ve her bağlamın kendi tutarlı modeli olur.2

Frontend'de bu şuna dönüşür: ödeme ekranında "müşteri" teslimat adresi ve ödeme yöntemidir, destek ekranında açık taleplerdir. İkisini tek bir global Customer tipine toplarsanız her ekran gereksiz alanlarla dolar.

// features/checkout/types.ts
export type Customer = {
  id: string
  shippingAddress: Address
  paymentMethodId: string
}

// features/support/types.ts
export type Customer = {
  id: string
  openTickets: number
  lastContactAt: string
}

İki dosyada aynı adın olması bilerek. Bağlamlar çakışan modeller arasında eşleme yapar.2 Pratikte API cevabını her bağlamın kendi tipine çevirirsiniz. Bu rehberin eşlemesi: bağlam sınırı, Feature-Sliced Design dilimi ya da özellik klasörü sınırıdır.

FSD ile ilişkisi

FSD'nin entities katmanı uygulamanın çalıştığı iş kavramlarını (kullanıcı, ürün) taşır. Projede böyle kavramlar yoksa bu katman isteğe bağlıdır.3 Ortak dil bu katmanın adlandırmasını besler. Bağlam sınırları ise dilim sınırlarını belirler.

Ne zaman gerekmez?

Hata

Fowler DDD'yi özellikle karmaşık alanlara uygun bulur.1 DDD'nin ayrıntılı desenleri (nesneleri Entity, Value Object ve Service olarak sınıflandırmak, Aggregate) de bu kitaptan gelir.1 Çoğu arayüz kodunda bu desenler gereksiz ağırlıktır. Bu rehberin önerisi: basit bir CRUD panelinde yalnızca ortak dil ve ayrı tipler yeter, kalanını karmaşıklık gerçekten ortaya çıkınca düşünün.

Kaynaklar

  • 1MakaleMartin Fowler: Domain Driven Design

    Alan modeli, ortak dil, Entity ve Aggregate sınıflaması ve karmaşık alanlara uygunluk. 22 Nisan 2020.

  • 2MakaleMartin Fowler: Bounded Context

    Aynı kelimenin farklı bağlamlarda farklı anlam taşıması, tek birleşik modelin neden uygulanamadığı ve bağlamlar arası eşleme. 15 Ocak 2014.

  • 3DokümanFeature-Sliced Design: Layers

    `entities` katmanı iş kavramlarını taşır, isteğe bağlıdır.

Bu sayfayı düzenle

Son güncelleme tarihi: 25 Ekim 2026

Önceki adım04. Feature-Sliced DesignSonraki adım06. Component-driven ve Atomic Design