C# Mediator Design Pattern

Cenker Kumlucalı
2 min readAug 31, 2023

--

Merhaba,

Mediator deseni, nesneler arasındaki iletişimi kolaylaştıran bir davranışsal tasarım desenidir. Bu desen, ilişkili nesneleri birbirinden bağımsız hale getirmeyi amaçlar ve böylece değişikliklerin bir nesneyi etkilemeden diğer nesneleri etkilemesini sağlar.

Mediator Deseninin Yapısı

Mediator desenini oluşturan birkaç bileşen vardır:

  1. Mediator: Bu, iletişimi düzenleyen ana bileşendir. Diğer bileşenlerle iletişim kurar ve mesajları yönlendirir.
  2. ConcreteMediator: Bu, Mediator arayüzü uygular ve iletişimi yönetir.
  3. Colleague: Bu, Mediator ile iletişim kuran nesnelerdir. Her bir Colleague, ConcreteMediator sınıfıyla iletişim kurarak diğer nesnelerle etkileşime geçer.
  4. ConcreteColleague: Bu, Colleague arayüzünü uygular ve ConcreteMediator ile iletişim kurar.

C# ile Mediator Deseninin Kullanımı

C#’ta Mediator desenini uygulamak için MediatR kütüphanesini kullanabiliriz. MediatR, CQRS (Command Query Responsibility Segregation) ve Mediator patterini birleştiren bir kütüphanedir.

Öncelikle, projenize MediatR kütüphanesini eklemeniz gerekmektedir. Sıradaki adım ise Mediator arayüzünü uygulayacak olan bir sınıf oluşturmaktır. Bu sınıf, Mesajları alacak ve bunları yönlendirecek olan merkezi noktadır. Örneğin, aşağıdaki gibi bir sınıf oluşturabiliriz:

public class ChatRoomMediator : IMediator
{
public async Task<TResponse> Send<TResponse>(IRequest<TResponse> request, CancellationToken cancellationToken = default)
{
// Mesajı alacak ve yönlendirecek kodlar burada yer alacak
// ...

return default;
}

// Diğer IMediator arayüzündeki metotları da uygulayabilirsiniz
}

Ardından, mesaj gönderecek nesneleri temsil eden Colleague sınıflarını oluşturabiliriz. Bu sınıflar, IRequest arayüzünü uygulayarak Mediator ile iletişim kurar. Örneğin:

public class SendMessageCommand : IRequest<Unit>
{
public string Message { get; set; }
}

public class SendMessageCommandHandler : IRequestHandler<SendMessageCommand, Unit>
{
private readonly IMediator _mediator;

public SendMessageCommandHandler(IMediator mediator)
{
_mediator = mediator;
}

public async Task<Unit> Handle(SendMessageCommand request, CancellationToken cancellationToken)
{
// Mesaj gönderme işlemini gerçekleştiren kodlar burada yer alacak
// ...

return Unit.Value;
}
}

Son olarak, MediatR kütüphanesini kullanarak Mediator ve Colleague sınıflarını birleştirebiliriz. Bunun için ConfigureServices metodu gibi bir konfigürasyon metodu kullanabiliriz. Örneğin:

public void ConfigureServices(IServiceCollection services)
{
// Mediator sınıfını kaydediyoruz
services.AddMediatR(typeof(Startup));

// Diğer servislerin kayıt işlemleri
// ...
}

Artık, SendMessageCommand sınıfını kullanarak mesaj gönderebiliriz:

public class HomeController : Controller
{
private readonly IMediator _mediator;

public HomeController(IMediator mediator)
{
_mediator = mediator;
}

[HttpPost]
public async Task<IActionResult> SendMessage(string message)
{
var command = new SendMessageCommand { Message = message };
await _mediator.Send(command);

return RedirectToAction("Index");
}
}

Bu makalede, C# Mediator desenini uygulamak için MediatR kütüphanesini nasıl kullanabileceğinizi açıkladım. Mediator deseni, nesneler arasındaki iletişimi kolaylaştırırken, bağımlılıkları azaltmanıza ve kodunuzun daha temiz ve esnek olmasını. Gelecekteki makalelerde daha fazla tasarım deseni üzerinde duracağım, takipte kalın!

--

--

No responses yet