Процесс преобразования внешнего события DDD в локальную команду
У меня есть ограниченный контекст, который слушает события из удаленного ограниченного контекста (т.е. UserBecameEligible
), и когда они поступают на шину событий, выполняется определенное действие путем сопоставления и вызова локального обработчика команд, то есть:
// command class
public class Sendlert
{
int UserId {get;set;}
string Message {get;set;}
}
// handler code
public class SendAlertCommandHandler
{
public class SendAlert: ICommandHandler<SendAlert>
{
public void Handle(SendAlert command)
{
// ...
// this.alertStrategy.Send(command.UserId, comnmand.Message);
}
}
}
Чтобы автоматизировать это, я думаю об использовании словаря сопоставления:
Dictionary<Type,Action<object,object>> externalEventToLocalCommands
Где первый тип - это внешний тип события, и функция для вызова из внешнего события в локальную команду, т.е.
object UserBecameEligibelToSendSmsConverter(object obj)
{
UserBecameEligableEvent evnt = obj as UserBecameEligableEvent;
return new SendAlert()
{
UserId = evnt.UserId,
Message = "Congrats " + evnt.FirstName + "you are now eligable for an account upgrade".
}
}
Я не помню, чтобы читать это ExternalEventToLocalCommandTranslator
есть ли в Vernon реализующий дизайн, управляемый доменом, какие-либо альтернативные стратегии или названия для вышеперечисленного, которые используют другие эксперты DDD, и какие-нибудь библиотеки с открытым исходным кодом с реализацией для изучения?