Я просматриваю некоторый код, в котором, как мне кажется, неправильно используются различные шаблоны, но я не могу выразить словами, что с ним не так.
База кода использует MediatR и использует шаблон Mediator для обработки запросов/ответов API/GRPC. Мы вводим Hangfire в проект, и именно здесь код начинает запутываться.
Вот пример одного из зависших заданий.
public class ConsolidateDate : IConsolidateData
{
private readonly DbContext _dbContext;
private readonly IMediator _mediator;
public ConsolidateDate(DbContext dbContext, IMediator mediator)
{
_dbContext = dbContext;
_mediator = mediator;
}
public async Task Consume()
{
var newGroupId = 10;
var groups = await _dbContext.Groups().ToListAsync();
foreach (var group in groups)
{
var individual = await _mediator.Send(new GetIndividualQuery(group.Id));
await _mediator.Send(new TransferDataCommand(new DataCommand(newGroupId, individual.Id));
}
}
}
Итак, во-первых, это доступ к контексту БД непосредственно из задания Hangfire. Во-вторых, он использует обработчики MediatR, которые используются из API (если они изменятся, то потребуется изменить задание).
На мой взгляд, задание либо просто обращается к контексту БД для всего этого, либо использует один обработчик MediatR, который может организовать бизнес-логику?