Saya pikir itu lebih fleksibel jika Anda menyimpan promotor sebagai bagian dari muatan acara daripada meta data. Masalah keamanan harus ditangani di luar domain. Tidak setiap acara dimunculkan oleh pengguna, meskipun Anda bisa membuat acara palsu untuk mereka (SysAdmin untuk CronJob).
Misalnya:
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
}
Saya pikir nama kelas sudah cukup. Menambahkan tabel lain memperumit pembacaan acara (dengan menggabungkan tabel), dan saya pikir itu hanya menambah nilai ketika nama kelas diganti namanya (Perbarui satu baris dalam tabel jenis acara). Tapi saya pikir itu tidak menambah banyak masalah dengan menggunakan
update domain_events set
aggregate_type = 'new class name'
where aggregate_type = 'origin class name'
Saya tidak yakin bahwa saya memahami grup acara, dapatkah Anda menambahkan lebih banyak penjelasan?
Terkadang peristiwa digunakan untuk mengintegrasikan berbagai konteks. Namun setiap peristiwa dimunculkan hanya dalam satu konteks. Misalnya, A ManualPaymentMadeEvent dimunculkan dalam konteks pemesanan, dan event listner dalam konteks pengiriman juga menggunakan itu, menganggapnya sebagai pemicu pengiriman awal.
Saya lebih suka menggunakan per pengguna basis data (istilah Oracle) per konteks. shipping.domain_events untuk konteks pengiriman dan pemesanan.domain_events untuk konteks pemesanan.
Berikut adalah skema di axon-framework yang mungkin bisa membantu
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);