Přeskočit na obsah
_CORE
Architektura Expert

Event Sourcing — stav jako historie událostí

Event SourcingEventsCQRS
3 min čtení

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