Доменное проектирование и доменные события

Я новичок в DDD и я читаю статьи сейчас, чтобы получить больше информации. Один из статьи фокусируется на событиях домена (DE). Например, отправка электронной почты-это событие домена, возникшее после выполнения некоторых критериев при выполнении фрагмента кода.

пример кода показывает один из способов обработки событий домена и сопровождается этим абзацем

имейте в виду, что приведенный выше код будет запущен в том же потоке в той же транзакции, что и регулярная работа домена, поэтому вы должны избегать выполнения каких-либо блокирующих действий, таких как использование SMTP или веб-служб. Вместо этого предпочитайте использовать односторонний обмен сообщениями для связи с чем-то еще, что делает эти блокирующие действия.

мои вопросы

  1. это общая проблема в обработке DE? Или это просто забота о решении в упомянутой статье?
  2. если события домена вызываются в транзакции, и система не будет обрабатывать их синхронно, как с ними обращаться?
  3. когда я решаю сериализовать эти события и позволить планировщику (или любому другому механизму) выполнить их, что происходит, когда транзакция откатывается? (в статье событие вызывается в коде, выполняемом в транзакции) кто их отменит (если они не сохраняются в базе данных)?

спасибо

1 ответов


Это период общей проблемы неважно ДДД

В общем, в любой системе, которая требуется для ответа в performant (например, веб-сервер, любые длительные действия должны обрабатываться асинхронно с процессом запуска.

Это означает очереди.

откат транзакции должен удалить элемент из очереди.

конечно, теперь вам нужны дополнительные механизмы для обработки ситуации, когда элемент в очереди не удается процесс-i.e электронная почта не отправляется - вам также необходимо учитывать это в своем коде запуска - наличие последующего процесса, основанного на более раннем процессе, уже произошло, в какой-то момент вызовет проблемы.

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