У меня есть этот код класса Saga ниже, и часть вопроса прокомментирована внутри кода. Имейте в виду упрощение кода, поскольку я удаляю вездесущие языки и другие детали, чтобы было легко читать.Использование Bus.Send() и использование API-сервисов внутри обработчика Saga
public class MessageSaga : Saga,
IPointBy<SendMessageCommand>, IHandle<RequestProcessingCommand>
{
private readonly IServices _services;
public MessageSaga(IServices services,
IBus bus, IEventStore eventStore, IRepository repository)
: base(bus, eventStore, repository)
{
_services = services;
}
public void Handle(SendMessageCommand message)
{
var msg = MessageAggregate.CreateNew(message.Id, message.Text);
Repository.Save(msg);
// This is my Question #1
var request = new RequestProcessingCommand(message.Id, message.Text);
Bus.Send(request);
}
public void Handle(RequestProcessingCommand message)
{
var item = Repository.GetById<MessageAggregate>(message.Id);
// This is my Question #2
var result = _services.ProcessMessage(message.Text);
var response = ProcessItem.Generate(item, result);
Repository.Save(reponse);
}
}
Так, в приведенном выше коде, у меня есть два вопроса:
В вопросе № 1, так как «Автобус» доступен в классе Saga, это правильный способ использования Bus.Send() для ссылки на другой обработчик, или я должен сделать это внутри класса Aggregate?
Как и в вопросе номер два, у меня есть этот API-интерфейс «_services» вне домена, это правильный способ использовать его внутри обработчика, или я должен делать это внутри классов агрегатов.
Все мои коды отлично работают, и я даже загружаю тест без каких-либо проблем. Так или иначе, я чувствую сомнение, поскольку обработчик полагает, что это простое сохранение событий. Благодарю.