Ich denke, es ist flexibler, wenn Sie den Promoter als Teil der Ereignisnutzlast anstelle von Metadaten speichern. Die Sicherheitsbedenken sollten außerhalb der Domäne gehandhabt werden. Nicht jedes Ereignis wird von einem Benutzer ausgelöst, obwohl Sie für ihn ein falsches Ereignis erstellen könnten (ein SysAdmin für CronJob).
Zum Beispiel:
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
}
Ich denke, Klassennamen sind genug. Das Hinzufügen einer weiteren Tabelle erschwert das Lesen von Ereignissen (durch Join-Tabellen), und ich denke, es fügt nur dann einen Wert hinzu, wenn die Klassennamen umbenannt werden (eine Zeile in der Ereignistyptabelle aktualisieren). Aber ich denke, es macht nicht viel Ärger durch die Verwendung von
update domain_events set
aggregate_type = 'new class name'
where aggregate_type = 'origin class name'
Ich bin mir nicht sicher, ob ich Ereignisgruppen verstehe, könnten Sie weitere Erläuterungen hinzufügen?
Manchmal werden die Ereignisse verwendet, um mehrere Kontexte zu integrieren. Aber jedes Ereignis wird nur in einem Kontext ausgelöst. Beispielsweise wird ein ManualPaymentMadeEvent im Bestellkontext ausgelöst, und ein Ereignislistener im Versandkontext konsumiert es ebenfalls und betrachtet es als Auslöser für den Beginn des Versands.
Ich ziehe es vor, pro Datenbankbenutzer (Oracle-Begriff) pro Kontext zu verwenden. shipping.domain_events für den Versandkontext und ordering.domain_events für den Bestellkontext.
Hier ist das Schema in axon-framework was helfen könnte
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);