TG Telegram Group & Channel
.NET Разработчик | United States America (US)
Create: Update:

День 2247. #ЗаметкиНаПолях
Не Смешивайте CQRS и MediatR. Окончание

Начало

CQRS без MediatR
CQRS можно реализовать так же легко и без MediatR. Вы можете определить команды и запросы как простые интерфейсы:

public interface ICommandHandler<in TCommand, TResult>
{
Task<TResult> Handle(
TCommand command, CancellationToken ct = default);
}

// аналогично для IQueryHandler

Теперь реализуем обработчики:
public record CreateOrderCommand(
string CustomerId, List<OrderItem> Items)
: ICommand<CreateOrderResult>;

public class CreateOrderCommandHandler :
ICommandHandler<CreateOrderCommand, CreateOrderResult>
{
public async Task<CreateOrderResult> Handle(
CreateOrderCommand command,
CancellationToken ct = default)
{
// реализация
}
}

и зарегистрируем их в DI-контейнере
builder.Services
.AddScoped<ICommandHandler<CreateOrderCommand, CreateOrderResult>, CreateOrderCommandHandler>();


Наконец, используем обработчик в контроллере:
[ApiController]
[Route("orders")]
public class OrdersController : ControllerBase
{
[HttpPost]
public async Task<ActionResult<CreateOrderResult>>
CreateOrder(
CreateOrderCommand command,
ICommandHandler<CreateOrderCommand, CreateOrderResult> handler)
{
var result = await handler.Handle(command);
return Ok(result);
}
}


В чем разница между этим подходом и подходом c MediatR?
Этот подход обеспечивает такое же разделение задач, но без косвенности. Он прямой, явный и часто достаточный для многих приложений.

Однако ему не хватает некоторых удобств, которые предлагает MediatR, таких как поведение конвейера и автоматическая регистрация обработчиков. Вам также необходимо внедрять обработчики в контроллеры, что может быть обременительным для более крупных приложений.

Итого
CQRS и MediatR — это отдельные инструменты, которые решают разные проблемы. Хотя они могут хорошо работать вместе, воспринимать их как нечто неделимое вредно. CQRS разделяет задачи чтения и записи, в то время как MediatR разделяет компоненты через посредника.

Важно понимание того, что предлагает каждый шаблон, и принятии обоснованных решений на основе вашего конкретного контекста. Иногда вам нужны оба, иногда только один, а иногда ни один. В этом суть продуманной архитектуры: выбор правильных инструментов для ваших конкретных потребностей.

Источник: https://www.milanjovanovic.tech/blog/stop-conflating-cqrs-and-mediatr

День 2247. #ЗаметкиНаПолях
Не Смешивайте CQRS и MediatR. Окончание

Начало

CQRS без MediatR
CQRS можно реализовать так же легко и без MediatR. Вы можете определить команды и запросы как простые интерфейсы:
public interface ICommandHandler<in TCommand, TResult>
{
Task<TResult> Handle(
TCommand command, CancellationToken ct = default);
}

// аналогично для IQueryHandler

Теперь реализуем обработчики:
public record CreateOrderCommand(
string CustomerId, List<OrderItem> Items)
: ICommand<CreateOrderResult>;

public class CreateOrderCommandHandler :
ICommandHandler<CreateOrderCommand, CreateOrderResult>
{
public async Task<CreateOrderResult> Handle(
CreateOrderCommand command,
CancellationToken ct = default)
{
// реализация
}
}

и зарегистрируем их в DI-контейнере
builder.Services
.AddScoped<ICommandHandler<CreateOrderCommand, CreateOrderResult>, CreateOrderCommandHandler>();


Наконец, используем обработчик в контроллере:
[ApiController]
[Route("orders")]
public class OrdersController : ControllerBase
{
[HttpPost]
public async Task<ActionResult<CreateOrderResult>>
CreateOrder(
CreateOrderCommand command,
ICommandHandler<CreateOrderCommand, CreateOrderResult> handler)
{
var result = await handler.Handle(command);
return Ok(result);
}
}


В чем разница между этим подходом и подходом c MediatR?
Этот подход обеспечивает такое же разделение задач, но без косвенности. Он прямой, явный и часто достаточный для многих приложений.

Однако ему не хватает некоторых удобств, которые предлагает MediatR, таких как поведение конвейера и автоматическая регистрация обработчиков. Вам также необходимо внедрять обработчики в контроллеры, что может быть обременительным для более крупных приложений.

Итого
CQRS и MediatR — это отдельные инструменты, которые решают разные проблемы. Хотя они могут хорошо работать вместе, воспринимать их как нечто неделимое вредно. CQRS разделяет задачи чтения и записи, в то время как MediatR разделяет компоненты через посредника.

Важно понимание того, что предлагает каждый шаблон, и принятии обоснованных решений на основе вашего конкретного контекста. Иногда вам нужны оба, иногда только один, а иногда ни один. В этом суть продуманной архитектуры: выбор правильных инструментов для ваших конкретных потребностей.

Источник: https://www.milanjovanovic.tech/blog/stop-conflating-cqrs-and-mediatr
👍20👎1


>>Click here to continue<<

.NET Разработчик




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)