Ik denk dat het flexibeler is als je de promotor opslaat als onderdeel van de payload van het evenement in plaats van metagegevens. De beveiligingsproblemen moeten buiten het domein worden afgehandeld. Niet elke gebeurtenis wordt door een gebruiker gegenereerd, hoewel je er een nep voor kunt maken (een SysAdmin voor CronJob).
Bijvoorbeeld:
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
}
Ik denk dat klassennamen voldoende zijn. Het toevoegen van een andere tabel bemoeilijkt het lezen van gebeurtenissen (door tabellen samen te voegen), en ik denk dat het alleen waarde toevoegt wanneer de klassennamen worden hernoemd (een rij bijwerken in de tabel met gebeurtenistypes). Maar ik denk dat het niet veel problemen toevoegt door
. te gebruikenupdate domain_events set
aggregate_type = 'new class name'
where aggregate_type = 'origin class name'
Ik weet niet zeker of ik evenementgroepen begrijp, kun je meer uitleg geven?
Soms worden de gebeurtenissen gebruikt om meerdere contexten te integreren. Maar elke gebeurtenis wordt slechts in één context aan de orde gesteld. Een ManualPaymentMadeEvent wordt bijvoorbeeld aan de orde gesteld in de bestelcontext, en een gebeurtenislistner in de verzendcontext gebruikt het ook, en beschouwt het als de trigger om de verzending te starten.
Ik gebruik liever per databasegebruiker (orakelterm) per context. shipping.domain_events voor verzendcontext en order.domain_events voor bestelcontext.
Hier is het schema in axon-framework wat zou kunnen helpen
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);