FluentValidation
Validator’larAbstractValidator<TRequest> türünden yazılır ve assembly taramasıyla otomatik kaydedilir. ValidationPipelineBehavior bunları handler’dan önce çalıştırır (bkz. Pipeline Behaviors).
Kayıt
DependencyInjection.cs tüm Application assembly’sini tarar:
AbstractValidator örneği
SignUpUserCommandValidator — Cascade(CascadeMode.Stop) ile boş telefon kontrolünden sonra format kontrolüne geçilir:
Custom validator’lar
SeedWork/Validations/ altında, Türkiye’ye özel domain kuralları için yeniden kullanılabilir validator’lar bulunur.
- MustBeValidMobilePhone (extension)
- MobilePhoneValidator
- TCKimlikNoValidator
MobilePhoneValidatorExtensions.cs — en sık kullanılan kural. NotEmpty + MobilePhoneUtility doğrulamasını tek çağrıda paketler:SeedWork/Validations/ altındaki diğer validator’lar: YabanciTCKimlikNoValidator, HESValidator, BirthdateValidator, ImageValidator, SmsCodeValidator, GuidValidator, RenkValidator, BasvuruBelgeValidator.
Format/checksum gibi tekrar eden kurallar value object seviyesinde de (Domain) doğrulanır — örn.
Phone, TCKimlikNo value object’leri. Validator katmanı, request’i daha controller seviyesinde reddedip aggregate’i hiç kurmadan hızlı geri bildirim verir; value object ise invariant’ın son savunma hattıdır.AutoMapper
Mapping’lerIMapFrom<T> convention’ı ile tanımlanır ve reflection ile otomatik toplanır.
Kayıt
IMapFrom convention
SeedWork/Mappings/IMapFrom.cs — default interface metodu basit CreateMap üretir; özel kural gerekirse DTO Mapping(Profile) metodunu override eder:
MappingProfile reflection taraması
MappingProfile.cs assembly’deki IMapFrom<> uygulayan tüm tipleri bulur ve Mapping metodlarını çağırır:
Örnek — UserDto mapping
VerifyOtp/UserDto.cs — value object’leri (Phone, Email) düz string’e, Status enumeration’ını .Name’e map eder:
Pagination
Sayfalı yanıtlarIPaged<T> / Paged<T> ile döner.
CountAsync + ListAsync ile doldurulur:
Sonraki adımlar
Command / Query deseni
Validator ve mapping’lerin handler içinde kullanımı.
Pipeline Behaviors
ValidationPipelineBehavior ve 422 yanıt üretimi.
Value Objects
Phone, Email, TCKimlikNo invariant’larının domain tarafı.
Caching
IReadRepository ve specification tabanlı HybridCache.