Rolü
Application katmanı, use-case orkestrasyonudur. İş kuralları Domain’de (aggregate’lar, value object’ler, domain servisleri) yaşar; Application bu kuralları bir senaryo etrafında düzenler:- Gelen request’i (Command/Query) karşılar,
- Repository / domain servis / factory çağrılarını sıralar,
- Aggregate metodlarını tetikler (domain event’ler burada doğar),
IUnitOfWork.SaveEntitiesAsyncile transaction’ı kapatır,- Sonucu bir
ResponseWrapperzarfı içinde döner.
IRepository<T> (write), okuma tarafı IReadRepository<T> (cache decorator) kullanır. Controller’lar incedir — sadece _mediator.Send(...) çağırır.
Application katmanı Infrastructure’a (
DiyanetCleanArchitecture.Infrastructure.EFCore) referans verir; çünkü DependencyInjection.cs MassTransit Outbox’ı DiyanetCleanArchitectureDbContext üzerine register eder. İş mantığı yine de Domain’e bağımlıdır, altyapıya değil.Klasör yapısı
Features altında Admin / Website ayrımı
Her feature, hedef SPA’ya göre ikiye ayrılır. Aynı aggregate için Admin (back-office) ve Website (vatandaş portalı) farklı DTO, farklı yetki ve farklı specification kullanır:Features/Authentication/Website/Commands/SignUpUser, .../VerifyOtp şeklindedir.
Request akışı
Bir Command/Query, Controller’dan MediatR’a girer, pipeline behavior zincirinden geçer ve Handler’a ulaşır. Handler aggregate’i değiştirir,IUnitOfWork SaveChanges yapar ve domain event’leri dağıtır.
Pipeline sırası DependencyInjection.cs içinde kayıt sırasıyla belirlenir: Exception → Authorization → Validation → Permission. LoggingPipelineBehavior kayıtlıdır ama yorum satırına alınmıştır.
Sonraki adımlar
Command / Query deseni
SignUpUser, VerifyOtp ve admin query örnekleriyle CQRS akışı.
Pipeline Behaviors
Exception, Authorization, Validation ve Permission zinciri.
Validation & Mapping
FluentValidation custom kuralları ve AutoMapper convention’ı.
Domain Katmanı
Aggregate’lar, value object’ler ve domain event’ler.