Je pense que c'est plus flexible si vous stockez le promoteur dans le cadre de la charge utile de l'événement au lieu des métadonnées. Les problèmes de sécurité doivent être traités en dehors du domaine. Tous les événements ne sont pas déclenchés par un utilisateur, bien que vous puissiez en créer un faux (un SysAdmin pour CronJob).
Par exemple :
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
}
Je pense que les noms de classe suffisent. L'ajout d'une autre table complique la lecture des événements (par les tables de jointure), et je pense que cela n'ajoute de la valeur que lorsque les noms de classe sont renommés (mise à jour d'une ligne dans la table de type d'événement). Mais je pense que cela n'ajoute pas beaucoup de problèmes en utilisant
update domain_events set
aggregate_type = 'new class name'
where aggregate_type = 'origin class name'
Je ne suis pas sûr de comprendre les groupes d'événements, pourriez-vous ajouter plus d'explications ?
Parfois, les événements sont utilisés pour intégrer plusieurs contextes. Mais chaque événement n'est soulevé que dans un contexte. Par exemple, un ManualPaymentMadeEvent est déclenché dans le contexte de la commande, et un écouteur d'événements dans le contexte de l'expédition le consomme également, le considère comme le déclencheur du démarrage de l'expédition.
Je préfère utiliser par utilisateur de base de données (terme oracle) par contexte. shipping.domain_events pour le contexte d'expédition et ordering.domain_events pour le contexte de commande.
Voici le schéma dans axon-framework qui pourrait aider
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);