CQRS Pattern & MediatR Pipeline Behaviors
Okuma (Query) ve Yazma (Command) operasyonlarını iki ayrı dünyaya ayırma mimarisidir.
Bir restoranda siparişi mutfağa ileten garson (Command) ile menü panosundaki yemek listesini okuyan ekranın (Query) tamamen ayrılmasıdır.
Command Query Responsibility Segregation (CQRS), veri değiştiren işlemleri (Create, Update, Delete) veri okuyan işlemlerden (Get, List) ayırır. MediatR kütüphanesi In-Process haberleşmeyi sağlar. Pipeline Behaviors ile cross-cutting (Validation, Logging, Performance) kurallar AOP mantığında araya girer.
“CQRS, veri okuma ve yazma modellerini ayırarak her birini bağımsız optimize etmeyi sağlar (örneğin yazma için Entity Framework, okuma için Dapper). MediatR Pipeline Behavior'lar ise her isteğin öncesinde FluentValidation veya Transaction yönetimini merkezi bir hatta (pipe) koşturur.”
public record CreateProductCommand(string Name, decimal Price) : IRequest<int>;
public class CreateProductHandler : IRequestHandler<CreateProductCommand, int>
{
public async Task<int> Handle(CreateProductCommand request, CancellationToken ct)
{
// Sadece yazma işi
return await _repo.SaveAsync(request);
}
}
Basit bir CRUD projesinde aşırı mühendislik (over-engineering) yaparak onlarca boş handler ve command dosyası üretmek.