MediatR Nedir?
MediatR bir CQRS kütüphanesidir. Bir aracı olarak da bahsedilebilir.
Bir önceki CQRS yazısında bahsettiğim gibi CQRS deseninin uygulamasını kolaylaştırmak için kullanılır. Asıl amacı Command ve Query işlemlerindeki organizasyonu düzenlemesidir. Bu kütüphane, uygulama içindeki sınıflar arasında mesaj iletişimi ve işlemleri düzenleme amacı taşır.
MediatR için Havaalanı Senaryosunu söylemeden bu yazıyı bitirirsem yüzüme tükürürler büyük ihtimalle,
Nedir bu meşhur Havaalanı Senaryosu?
Çok basit bir mantıkla uçaklar kafalarına göre inip kalkış yapamıyorlar. Her uçağın kendi bir programı belirli bir saati var. Bu planları, saatleri düzenleyen ve organize eden kısım ise kuledir. MediatR'da aynı mantıkla çalışır ve bu yüzden gereksinim duyulur.
Çeşitli nesneler arasında komplike ilişkileri yönetmemizi sağlar.
Şekilde de gördüğümüz gibi Command için Request,Response nesnelerimiz ve Handler bulunmakta. Burada hangi isteğe göre ya da hangi nesneyi nerede kullanacağız sorusu MediatR kütüphanesini kullanmamız için yeterli bir sorudur.
MediatR Kullanımı
İlk olarak CQRS için yazdığımız katman veya böyle bir katmanınız yok ise App üzerinde sağ tıklayıp Manage NuGet Packages ile paket penceresini açalım daha sonradan Browse kısmına gelip MediatR kütüphanesini indirelim.
Ardından MediatR ile kullanılacak Handler sınıflarını register etmek için aşağıdaki kod bloğunu Startup.cs sınıfındaki ConfigureServices metodunun içerisine ekliyoruz.
Ayrıca Startup.cs içerisinde BusinessRegister içerisine ekliyorum ve BusinessRegister olarak çağırıyorumş. Kendi kodunuzda buna dikkat etmelisiniz.
Daha sonra Query için sınıfımızı yani ben login işlemi için örnek vereceğimden LoginRequestModel sınıfımızı oluşturabiliriz.
Gördüğümüz gibi buradada LoginUserRequestModel, IRequest interface(arayüz)'den türüyor. Bu interface içerisinde ise BaseResponseModel<LoginUserModel> kısmı ise Query sınıfının dönüş tipini temsil eder.
IRequest, command veya query requestlerini karşılayacak olan sınıflar tarafından iplemente edilecek olan bir interface(arayüz)'dir. Generic olarak bu request karşılığında hangi nesnenin döndürüleceğini belirtmemizi ister.
IRequestHandler, command veya query requestlerinin işlenmesini sağlayacak olan Handler sınıfının interface(arayüz)'dir. Generic olarak request ve response sınıflarının belirtilmesini ister ve o sınıfa içerisindeki Handle isimli fonksiyonu iplemente eder.
LoginUserQueryHandler sınıfımız ise bu şekilde.
MediatR kütüphanesinin en önemli noktası ise bu command ve query sınıflarını controller üzerinde kullanırken daha kolay ve sade bir iplemente işlemi gerektirmesi. Yukarıdaki örnekte görüldüğü gibi.
Bu yazımda MediatR Nedir ve CQRS ile kullanımını inceledik. Sonraki yazılarımda görüşmek üzere,
İyi çalışmalar
Bir yanıt yazın