Я пытаюсь узнать больше о DDD
и проходил через DomainEvents
. Допустим, у нас есть три микросервиса Service A
, Service B
и Service C
.
Service A
имеет сущность Foo
, определенную следующим образом:
public class Foo : AggregateRoot
{
public string id {get; private set;}
public string name {get; private set;}
public string email {get; private set;}
}
, а Service B
- это служба, которая зависит от email
от Foo
, тогда как Service C
зависит от name
с Foo
, и данные реплицируются с Service A
на Service B
и на Service C
всякий раз, когда происходит изменение значений Foo
через Bus
.
Рекомендации по событиям в домене, с которыми я столкнулся:
- Не передавайте избыточную информацию как часть данных
DomainEvent
. - Когда
consuming BoundedContext
знает о Producing BoundedContext
, возможно, поделитесь идентификатором, иначе передайте полную информацию - Не используйте
DomainClasses
для представления данных в событиях - Используйте
Primitive types
для данных в Events
Теперь вопрос, который возник из-за противоречивых рекомендаций:
Означает ли это, что я должен запускать два разных события, когда они меняются, как FooNameChange
и FooEmailChanged
и только использовать id
вместе с updated value
как часть Event Payload
?
Или я могу просто сделать один DomainEvent
с именем FooChanged
, принять состояние сериализации Foo
и запустить событие. Затем запишите обработчик как часть того же BoundedContext
, который будет принимать данные, и поместите его в Bus
для любой службы, подписанной на сообщение, и отдельная служба решит, какие действия предпринять, основываясь на Id
, который было прикреплено и событие arg ( обновленные данные ).