Доменное проектирование и доменные события
Я новичок в DDD и я читаю статьи сейчас, чтобы получить больше информации. Один из статьи фокусируется на событиях домена (DE). Например, отправка электронной почты-это событие домена, возникшее после выполнения некоторых критериев при выполнении фрагмента кода.
пример кода показывает один из способов обработки событий домена и сопровождается этим абзацем
имейте в виду, что приведенный выше код будет запущен в том же потоке в той же транзакции, что и регулярная работа домена, поэтому вы должны избегать выполнения каких-либо блокирующих действий, таких как использование SMTP или веб-служб. Вместо этого предпочитайте использовать односторонний обмен сообщениями для связи с чем-то еще, что делает эти блокирующие действия.
мои вопросы
- это общая проблема в обработке DE? Или это просто забота о решении в упомянутой статье?
- если события домена вызываются в транзакции, и система не будет обрабатывать их синхронно, как с ними обращаться?
- когда я решаю сериализовать эти события и позволить планировщику (или любому другому механизму) выполнить их, что происходит, когда транзакция откатывается? (в статье событие вызывается в коде, выполняемом в транзакции) кто их отменит (если они не сохраняются в базе данных)?
спасибо
1 ответов
Это период общей проблемы неважно ДДД
В общем, в любой системе, которая требуется для ответа в performant (например, веб-сервер, любые длительные действия должны обрабатываться асинхронно с процессом запуска.
Это означает очереди.
откат транзакции должен удалить элемент из очереди.
конечно, теперь вам нужны дополнительные механизмы для обработки ситуации, когда элемент в очереди не удается процесс-i.e электронная почта не отправляется - вам также необходимо учитывать это в своем коде запуска - наличие последующего процесса, основанного на более раннем процессе, уже произошло, в какой-то момент вызовет проблемы.
короче говоря, ваш механизм массового обслуживания должен быть транзакционным и допускать повторные попытки, и вам нужно думать обо всей цепочке событий как о рабочем процессе.