Давайте представим, что у нас есть пользовательский объект, и мы хотим синхронизировать состояние этого объекта через сервис-ориентированную архитектуру, используя события.Что касается события, которое отправляется при изменении пользователя, мне было интересно, какой из этих параметров будет лучше для тела события:
- Отправка только полей, которые были изменены.
- Отправка всех полей в пользовательском объекте, оставляя у подписчика ответственность за проверку того, какие поля претерпели какие-либо изменения.
В примере, о котором я думаю, было бы целесообразно следующееСценарий:
- В службе A поле
profile
пользователя обновляется, и в теме user-updated
отправляется событие - Служба B, на которую подписанэтот раздел обновляет информацию о пользователе, и в результате этого обновления поле
contact-email
этого пользователя изменяется.Учитывая, что состояние пользователя изменилось, в ту же тему отправляется событие. - Служба A, которая также подписана на эту тему, получает событие и локально обновляет поле
contact-email
пользователя,Учитывая, что состояние пользователя изменилось, событие отправляется в ту же тему. - Служба B получает последнее событие, в котором изменилось только
contact-email
, и пытается обновить пользователя.Поскольку между существующей пользовательской информацией и полученной пользовательской информацией не происходит никаких изменений, состояние не изменяется, и дальнейшее событие в теме user-updated
не отправляется.
Этот процесс кажется мне довольно сложным дажехотя есть только 2 службы, отслеживающие состояние пользователя.В реальном примере количество таких услуг может быть намного выше.