Мне было интересно, какой должна быть степень детализации названий тем в событийно-ориентированной сервис-ориентированной архитектуре.
Давайте представим, что у нас есть система управления пользователями, в которой пользователи могут выполнять различные действия, такие как регистрация, вход в систему, изменение некоторых атрибутов профиля и т. Д. Если мы хотим уведомить остальные службы об этих изменениях, я могу подумать о некоторых возможностях для название темы:
Одна тема для каждой из классических операций CRUD в каждой из моделей (исключая чтение, поскольку состояние пользователя не меняется). У нас были бы
user-created
,user-updated
,user-deleted
. Этот подход является достаточно общим, но потенциально может быть много служб, подписанных наuser-updated
тему и отбрасывающих все те события, которые не изменяют конкретное поле.Одна тема для каждого важного для бизнеса изменения. В дополнение к
user-created
иuser-deleted
у нас могут быть такие события, какuser-email-updated
,user-signed-in
(которые в противном случае были бы запущены как событиеuser-updated
, когда была изменена дата последнего входа в систему) и т. Д. Я считаю, что даже если это было бы удобно тем подписчикам, которых интересуют только очень конкретные изменения, будет сложнее для тех служб, которым необходимо синхронизировать все, что происходит с пользователем, поскольку им придется подписываться на все большее количество тем, чтобы отслеживать все изменения в модель пользователя.Смесь от 1 до 3, где оба события
user-updated
иuser-email-updated
будут отправляться, когда пользователь обновляет электронное письмо, но толькоuser-updated
будет отправлено, если пользователь изменит профиль.