Desen
Her use-case bir Command (yazma) veya Query (okuma) ile temsil edilir. Üçlü her zaman birlikte yaşar:Klasör konvansiyonu
Her use-case kendi klasöründe izole edilir:Command’ler genelde
class + init property’leridir; Query’ler sealed record pozisyonel syntax kullanır. İkisi de MediatR IRequest<...> döner.Örnek 1 — SignUpUser (Command)
Vatandaş telefon numarasıyla kayıt başlatır; handler bir OTP challenge üretir ve doğrulama için kullanılacak challenge token’ı döner.Command
Features/Authentication/Website/Commands/SignUpUser/SignUpUserCommand.cs
Validator
SignUpUserCommandValidator.cs — MustBeValidMobilePhone() extension’ı Türkiye mobil numara doğrulaması yapar (bkz. Validation & Mapping).
Handler
SignUpUserCommandHandler.cs — domain servisini, OTP value object’ini, aggregate metodunu ve UnitOfWork’ü orkestre eder:
SMS gönderimi handler içinde değildir.
user.AddOtpChallenge(...) bir UserOtpGeneratedDomainEvent yayar; SaveEntitiesAsync sonrası SendOtpSmsDomainEventHandler bunu in-process dinler ve NetGSM üzerinden gönderir. Handler sadece use-case’i orkestre eder.Örnek 2 — VerifyOtp (Command)
Kullanıcı challenge token’ı (header) + OTP kodu (body) gönderir. Handler kodu doğrular, access/refresh token üretir ve oturum başlatır.Features/Authentication/Website/Commands/VerifyOtp/VerifyOtpCommandHandler.cs
Örnek 3 — GetAdminBagisBasvuruPlanlar (Query)
Sayfalanmış admin liste sorgusu.sealed record syntax’ı, IReadRepository<T> (cache decorator), specification, Paged<T> ve AutoMapper kullanır.
Query
Features/BagisBasvuruPlanlari/Admin/Queries/GetAdminBagisBasvuruPlanlar/GetAdminBagisBasvuruPlanlarQuery.cs
Handler
ResponseWrapper zarfı
Tüm handler’larIResponseWrapper<TResponse> döner. Şekil:
ResponseWrapper<T> static factory metodları sunar:
Sonraki adımlar
Pipeline Behaviors
Handler’dan önce çalışan Exception / Authorization / Validation / Permission zinciri.
Validation & Mapping
MustBeValidMobilePhone ve IMapFrom convention detayları.
Authorization
IRequirePermissions / IRequireTenantAccess marker’ları.
Domain Events
AddOtpChallenge’ın yaydığı event’ler ve handler’ları.