.Net Core ve MediatR ile CQRS Pattern

CQRS, bir uygulamanın yazma işlemlerini (komutları) ve okuma işlemlerini (sorguları) iki farklı modelde ele almayı öneren bir tasarım prensibidir. Bu, uygulamanın karmaşıklığını azaltabilir ve performansı artırabilir.
Avantajları:
- Performans Artışı: Yazma ve okuma işlemleri için optimize edilmiş modeller kullanılarak performans artırılabilir.
- Esneklik: Yazma ve okuma işlemleri için farklı modeller kullanılarak bağımsızlık ve esneklik sağlanabilir.
Ölçeklenebilirlik: Yazma ve okuma işlemleri ayrı modellerde ele alındığı için, her iki tarafı da bağımsız olarak ölçeklendirebilirsiniz.
NET Core Mikroservis Mimarisinde CQRS Yapılanması
Mikroservis mimarisi, karmaşık uygulamaları yönetilebilir parçalara bölen bir yaklaşım sunarken, CQRS (Command Query Responsibility Segregation) ise uygulamanızın yazma (command) ve okuma (query) operasyonlarını ayırmayı öneren bir tasarım prensibidir.
NET Core Mikroservisinde CQRS Nasıl Kurulur?
1: CQRS Paketlerini Ekleyin
Projenize CQRS yapısını eklemek için gerekli olan paketleri yükleyin (dotnet add package MediatR)
2: Komut ve Sorgu Modellerini Oluşturun
Yazma (komut) ve okuma (sorgu) işlemleri için ayrı modeller oluşturun:
// Komut Modeli
public class CreateProductCommand : IRequest<int>
{
// Komut parametreleri
public string Name { get; set; }
public decimal Price { get; set; }
}
// Sorgu Modeli
public class GetProductQuery : IRequest<Product>
{
// Sorgu parametreleri
public int ProductId { get; set; }
}
3: Komut ve Sorgu İşleyicilerini Oluşturun
Komut ve sorgu işlemlerini ele alacak işleyiciler oluşturun:
public class CreateProductCommandHandler : IRequestHandler<CreateProductCommand, int>
{
// Komut işleyici kodları
public async Task<int> Handle(CreateProductCommand request, CancellationToken cancellationToken)
{
// Yeni ürün oluştur ve veritabanına ekle
// ...
return newProductId;
}
}
public class GetProductQueryHandler : IRequestHandler<GetProductQuery, Product>
{
// Sorgu işleyici kodları
public async Task<Product> Handle(GetProductQuery request, CancellationToken cancellationToken)
{
// Ürünü veritabanından getir
// ...
return product;
}
}
Adım 4: Servis Bağlamalarını Ekleyin
Mikroservisinizde CQRS yapısını kullanabilmek için servis bağlamalarını ekleyin:
public class ProductService
{
private readonly IMediator _mediator;
public ProductService(IMediator mediator)
{
_mediator = mediator;
}
public async Task<int> CreateProduct(string name, decimal price)
{
var command = new CreateProductCommand { Name = name, Price = price };
return await _mediator.Send(command);
}
public async Task<Product> GetProduct(int productId)
{
var query = new GetProductQuery { ProductId = productId };
return await _mediator.Send(query);
}
}
Bu örnekte, ProductService sınıfı, CQRS yapısını kullanarak ürün oluşturma ve ürün getirme işlemlerini gerçekleştiriyor.
Sonuç
Bu makalemde, .NET Core mikroservis mimarisinde CQRS (Command Query Responsibility Segregation) yapısını nasıl kullanabileceğinizi adım adım gördük. CQRS, uygulamanızın yazma ve okuma işlemlerini daha etkili bir şekilde ele almanıza yardımcı olabilir ve mikroservis mimarinizdeki performans ve esneklik ihtiyaçlarını karşılamak için güçlü bir araçtır.
Makaleyi okuduktan sonra, projenizin ihtiyaçlarına göre CQRS yapısını özelleştirebilir ve kullanabilirsiniz. İyi kodlamalar! ??