Architektur Experte
Event Sourcing — Zustand als Ereignishistorie¶
Event SourcingEventsCQRS 3 Min. Lesezeit
Zustand als Sequenz von Ereignissen speichern. Event Store, Projektionen, Snapshots und Implementierung.
Prinzip¶
Anstelle des aktuellen Zustands speichern Sie eine Sequenz von Ereignissen. Den Zustand erhalten Sie durch Wiedergabe aller Events.
# Traditionell: 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)]
);
}
}
}
Projektionen¶
Events sind für Abfragen nicht effizient. Projektionen = Read Models, die bei jedem neuen Event aktualisiert werden. Snapshots speichern den Zustand nach N Events.
Zusammenfassung¶
Event Sourcing bietet einen vollständigen Audit Trail und Zeitreisen. Aber es erhöht die Komplexität. Verwenden Sie es dort, wo die Historie entscheidend ist (Finanzen, Compliance).
Brauchen Sie Hilfe bei der Implementierung?¶
Unser Team hat Erfahrung mit dem Entwurf und der Implementierung moderner Architekturen. Wir helfen Ihnen gerne.