Architektura
Expert
Event Sourcing — stav jako historie událostí
Ukládejte stav jako sekvenci událostí. Event store, projekce, snapshoty a implementace.
Princip
Místo aktuálního stavu ukládáte sekvenci událostí. Stav získáte přehráním všech eventů.
# Tradiční: Account { id: 1, balance: 150 }
# Event Sourcing:
AccountCreated { id: 1, balance: 0 }
MoneyDeposited { amount: 200 }
MoneyWithdrawn { amount: 50 }
# → Replay: 0 + 200 - 50 = 150
Event Store
class EventStore {
async append(aggregateId, events, expectedVersion) {
const current = await this.getVersion(aggregateId);
if (current !== expectedVersion) throw new Error('Concurrency conflict');
for (const event of events) {
await this.db.query(
'INSERT INTO events (aggregate_id, version, type, data) VALUES ($1, $2, $3, $4)',
[aggregateId, ++current, event.type, JSON.stringify(event.data)]
);
}
}
}
Projekce
Eventy nejsou efektivní pro dotazy. Projekce = read modely aktualizované při každém novém eventu. Snapshoty ukládají stav po N eventech.
Shrnutí
Event Sourcing dává kompletní audit trail a časové cestování. Ale přidává komplexitu. Používejte kde je historie klíčová (finance, compliance).
Potřebujete pomoct s implementací?
Náš tým má zkušenosti s návrhem a implementací moderních architektur. Rádi vám pomůžeme.
Nezávazná konzultace