Skip to main content
Domain katmanı sistemin kalbidir: iş kuralları, davranışlar ve değişmezler (invariant) burada yaşar. Hiçbir framework, veritabanı ya da HTTP detayına bağımlı değildir. CQRS handler’ları, EF Core yapılandırmaları ve servisler hep bu çekirdeğin etrafında konumlanır. İki proje vardır:
  • DiyanetCleanArchitecture.Domain — aggregate’ler, domain event’ler, factory ve domain service’ler.
  • DiyanetCleanArchitecture.Domain.SharedKernel — DDD yapı taşları (Entity, ValueObject, Enumeration, DomainEvent), guard yardımcıları ve paylaşılan value object’ler.
Bağımlılık yönü tek taraflıdır: Domain yalnızca SharedKernel’e bağımlıdır. SharedKernel ise sadece MediatR (INotification için) ve Ardalis.Specification (repository arayüzleri için) gibi minimal paketlere dayanır. Domain, Application/Infrastructure’a asla bağımlı değildir.

DDD yapı taşları

Entity

Kimliği (Id) olan, yaşam döngüsü boyunca takip edilen nesneler. Entity : EntityBase<Guid>.

Value Object

Kimliği olmayan, değerine göre eşitlenen, değişmez (immutable) nesneler. FullName, Email, Phone.

Aggregate Root

Tutarlılık sınırı. Dışarıdan yalnızca root üzerinden erişilir. IAggregateRoot marker arayüzü ile işaretlenir.

Domain Event

Aggregate içinde olup biteni anlatan olaylar. DomainEvent + INotification. AddDomainEvent ile yayılır.

Enumeration

Tip-güvenli, davranış taşıyabilen sabit küme (enum yerine). UserStatus, Role, OtpType.

Factory / Domain Service

Karmaşık oluşturma ve tek aggregate’e sığmayan iş kuralları. IUserFactory, UserRegistrationService.

Klasör yapısı

Her aggregate kendi klasöründe kapalı bir paket gibi durur: root, çocuk entity’ler, o aggregate’e özgü enumeration’lar ve Specifications/ alt klasörü. Yeni bir aggregate eklerken bu deseni birebir takip edin.

Aggregate listesi

District, Guid yerine int kimlik kullanan tek aggregate’tir (EntityBase<int>). Sabit reference data olduğu için audit alanları boş kalır.

Sonraki adımlar

SharedKernel

EntityBase, ValueObject, Enumeration, DomainEvent ve guard altyapısı.

Aggregate'ler

User aggregate’i derinlemesine + tüm aggregate’lerin özeti.

Value Object'ler

Değişmezlik, ctor validasyonu ve hazır VO kataloğu.

Domain Event'ler

Olay yayma, MediatR dispatch ve domain vs integration event ayrımı.