CQRS и команды Java + Spring аналогичны MediatR - PullRequest
0 голосов
/ 08 октября 2018

Работая над проектом .NET, я натолкнулся на библиотеку MediatR, которая сделала CQRS и Команды простыми в реализации.Мне действительно нравится использовать команды и обработчики команд, так как я работал над слишком многими проектами, которые имеют гигантские классы процедурных процедурных стилей, которые внедряют множество зависимостей, делая модульное тестирование болезненным.Я ищу что-то похожее на MediatR для Spring + Java.По сути, я хотел бы добавить одну зависимость в класс контроллера и передать ему команды в соответствующий обработчик команд.Я предоставил несколько фрагментов того, как MediatR выглядит ниже.Я предпочитаю способ, которым посредник делает это, так как внедрение CommandHandlers в класс контроллера может привести к той же самой проблеме с классом, имеющим множество зависимостей.

Я сталкивался с этой библиотекой, но это больше похоже на сторонупроект, что-то, что готово к производству.https://github.com/sleroy/spring-cqrs-arch. Я знаю об инфраструктуре Axon, но я не собираюсь использовать полноценный источник событий на этом этапе.Есть ли какие-нибудь библиотеки для этого, с которыми я еще не сталкивался?Я полагаю, я мог бы просто использовать Guava EventBus.

Ниже приведен пример C # того, как выглядит использование MediatR.

Контроллер

namespace DAB.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class PersonController : ControllerBase
    {
        private readonly IMediator mediator;

        public PersonController(IMediator mediator)
        {
            this.mediator = mediator;
        }

        // GET api/values
        [HttpPut("{id}/changename")]
        public async Task<ActionResult> ChangeName([FromBody] ChangeNameCommand command)
        {
            await this.mediator.Send(command);
            return Ok();
        }
    }
}

Команда

public class ChangeNameCommand: IRequest<bool>
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

CommandHandler

public class ChangeNameHandler: IRequestHandler<ChangeNameCommand, bool>
{
    public Task<bool> Handle(ChangeNameCommand request, CancellationToken cancellationToken)
    {
        Console.WriteLine($"Changing name to {request.FirstName} {request.LastName}");
        return Task.FromResult(true);
    }
}

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Выезд PipelinR .Это 15 КБ, библиотека с нулевой зависимостью, с хорошей интеграцией Spring и Spring Boot.

0 голосов
/ 23 января 2019

, если вы все еще ищете похожую библиотеку, я создал библиотеку, которая работает аналогично с mhinze / ShortBus .Вы можете проверить это в https://github.com/kazupooot/shortbus. В настоящее время он поддерживает одно сообщение о запросе / ответе обработчика.

...