Мисля, че е по-гъвкаво, ако съхранявате промоутъра като част от полезния товар на събитието вместо метаданни. Проблемите със сигурността трябва да се решават извън домейна. Не всяко събитие се повдига от потребител, въпреки че можете да направите фалшиво за тях (SysAdmin за CronJob).
Например:
ManualPaymentMadeEvent { //store this object as details in your schema
amount,
by_user//In this case, developers can determine whether store the promoter case by case
}
Мисля, че имената на класовете са достатъчни. Добавянето на друга таблица усложнява четенето на събития (чрез таблици за присъединяване) и мисля, че добавя стойност само когато имената на класовете се преименуват (Актуализирайте един ред в таблицата с типове събития). Но мисля, че не добавя много проблеми с помощта на
update domain_events set
aggregate_type = 'new class name'
where aggregate_type = 'origin class name'
Не съм сигурен, че разбирам групите събития, можете ли да добавите повече обяснение?
Понякога събитията се използват за интегриране на множество контексти. Но всяко събитие се повдига само в един контекст. Например ManualPaymentMadeEvent се повдига в контекста на поръчката и списъкът на събития в контекста на доставката също го консумира, считайки го за тригер за стартиране на доставката.
Предпочитам да използвам за потребител на база данни (термин oracle) за контекст. shipping.domain_events за контекст на доставка и ordering.domain_events за контекст на поръчка.
Ето схемата в axon-framework което може да помогне
create table DomainEventEntry (
aggregateIdentifier varchar2(255) not null,
sequenceNumber number(19,0) not null,
type varchar2(255) not null, --aggregate class name
eventIdentifier varchar2(255) not null,
metaData blob,
payload blob not null, -- details
payloadRevision varchar2(255),
payloadType varchar2(255) not null, --event class name
timeStamp varchar2(255) not null
);
alter table DomainEventEntry
add constraint PK_DomainEventEntry primary key (aggregateIdentifier, sequenceNumber, type);