Итак, я делаю что-то подобное и использую postgres, который поддерживает поддержку json ('simple-json') в родном языке TypeORM ( ссылка ).Хорошо это или плохо, но моя сущность события выглядит так:
@Entity()
export class MyEvent {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
name: string;
@Column('simple-json')
data: object;
@CreateDateColumn({type: 'timestamp'})
created_at: Date;
}
Важно отметить, что я использую только свои постоянные события для контрольного журнала и гибкость потенциальных прогнозов, которые я еще не строю.Вы можете абсолютно запросить JSON в postgres, используя TypeORM, например..where('my_event.data ::jsonb @> :data', {data: {someDataField: 2}})
, но, насколько я понимаю, запросы на ваши события, чтобы узнать текущее состояние, как бы упускают из виду CQRS.Лучше создать агрегаты в новых таблицах прогнозов или обновить один огромный прогноз.
Я в порядке с тем, как я в настоящее время продолжаю свои события, но это, конечно, не СУХОЙ.Я бы подумал, что расширение базового класса с помощью обычного saveEvent
метода или использование класса EventHandlerFactory, который будет принимать репозиторий в своем конструкторе, будет немного чище, чем внедрение репозитория в каждый обработчик.
Может, у кого-то есть хорошие мысли?