Tôi nghĩ sẽ linh hoạt hơn nếu bạn lưu trữ quảng cáo như một phần của trọng tải sự kiện thay vì dữ liệu meta. Các mối quan tâm về bảo mật nên được xử lý bên ngoài miền. Không phải mọi sự kiện đều do người dùng nêu ra, mặc dù bạn có thể tạo sự kiện giả cho họ (SysAdmin cho CronJob).
Ví dụ:
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
}
Tôi nghĩ tên lớp là đủ. Việc thêm một bảng khác sẽ làm phức tạp việc đọc sự kiện (bởi các bảng tham gia) và tôi nghĩ rằng nó chỉ thêm giá trị khi tên lớp được đổi tên (Cập nhật một hàng trong bảng loại sự kiện). Nhưng tôi nghĩ rằng nó không gây ra nhiều rắc rối bằng cách sử dụng
update domain_events set
aggregate_type = 'new class name'
where aggregate_type = 'origin class name'
Tôi không chắc mình hiểu các nhóm sự kiện, bạn có thể giải thích thêm không?
Đôi khi các sự kiện được sử dụng để tích hợp nhiều ngữ cảnh. Nhưng mỗi sự kiện chỉ được nêu ra trong một ngữ cảnh. Ví dụ:một ManualPaymentMadeEvent được nâng lên trong ngữ cảnh đặt hàng và một trình liệt kê sự kiện trong ngữ cảnh vận chuyển cũng sử dụng nó, coi nó như là yếu tố kích hoạt bắt đầu vận chuyển.
Tôi thích sử dụng cho mỗi người dùng cơ sở dữ liệu (thuật ngữ oracle) cho mỗi ngữ cảnh. shipping.domain_events cho ngữ cảnh giao hàng và đặt hàng.domain_events cho ngữ cảnh đặt hàng.
Đây là giản đồ trong axon-framework có thể hữu ích
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);