Антипаттерн с использованием Mediatr и прямого доступа к БД [closed]

Я просматриваю некоторый код, в котором, как мне кажется, неправильно используются различные шаблоны, но я не могу выразить словами, что с ним не так.

База кода использует 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, который может организовать бизнес-логику?

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *