Я пытался выяснить предпочтительный способ выполнения поиска событий при использовании рецепта NestJS CQRS (https://docs.nestjs.com/recipes/cqrs).
Я смотрел на фреймворк NestJS в течение последних двух недель, и мне нравятся все его аспекты. За исключением документов, которые в некоторых областях довольно тонкие.
Либо NestJS действительно не имеет мнения о том, как реализовать Event Sourcing, либо мне не хватает чего-то очевидного.
Мой главный вопрос: как проще всего сохранить сами события?
Сейчас мои события выглядят довольно просто:
import { IEvent } from '@nestjs/cqrs';
export class BookingChangedTitleEvent implements IEvent {
constructor(
public readonly bookingId: string,
public readonly title: string) {}
}
Моя первоначальная идея заключалась в использовании TypeORM (https://docs.nestjs.com/recipes/sql-typeorm), и каждое из моих событий не только реализует IEvent
, но и наследует TypeORM @Entity()
.
Но у этого будет одна таблица (SQL) или коллекция (NoSQL) для каждого из событий, что сделает невозможным чтение всех событий, которые произошли с одним агрегатом. Я что-то упускаю?
Другой подход - сбрасывать каждое событие в JSON, что звучит довольно просто. Но как мне тогда загрузить объект IEvent
классов из базы данных? (похоже, что я реализую свой собственный ORM)