Я пытаюсь хранить события домена в базе данных postgres. Я не уверен во многих вещах и не хочу переделывать эту структуру позже, поэтому я ищу совета у людей, имеющих опыт работы с источниками событий. В настоящее время у меня есть следующая таблица:
domain events
version - or event id, integer sequence, helps to maintain order by replays
type - event type, probably classname with namespace
aggregate - aggregate id, probably random string for each aggregate
timestamp - when the event occured
promoter - the promoter of the event, probably user id
details - json encoded data about the properties
В чем я не уверен:
- Должен ли я хранить промоутер события домена?
Это может помочь найти скомпрометированную учетную запись из-за нарушений безопасности, но я не знаю, что хранить, например, с помощью CRONjob. - В каком формате хранить тип события?
Должен ли я добавить таблицу с типами событий или достаточно имен классов?
Должен ли я добавлять группы событий? - Меня смутило определение ограниченных контекстов. Насколько мне известно, у каждого агрегата может быть несколько ограниченных контекстов, поэтому я могу использовать разные аспекты одного агрегата в нескольких модулях. Звучит неплохо, поскольку, например, учетные записи могут быть связаны со многими вещами, включая аутентификацию, авторизацию, профиль пользователя, сообщения пользователей, пользовательские контракты и т. д....
В чем я не уверен, что событие домена может иметь несколько ограниченные контексты или только один, поэтому должен ли я также хранить контексты событий? (для случаев, когда я хочу воспроизвести события, связанные с одним контекстом)
Как реализовать так много свойств в одном агрегатном классе, должен ли я использовать какую-то композицию?