Přeskočit na obsah
_CORE
Architektura Expert

CQRS — oddělení čtení a zápisu

CQRSArchitekturaPatterns
3 min čtení

Command Query Responsibility Segregation pro lepší škálovatelnost. Implementace s praktickými příklady.

Co je CQRS?

CQRS odděluje zápis (Command) od čtení (Query). Čtení potřebuje rychlé dotazy přes denormalizovaná data, zápis potřebuje validaci a konzistenci.

Příklad

// Command — zápis
class OrderCommandHandler {
    async createOrder(cmd) {
        const order = new Order(cmd.customerId, cmd.items);
        await this.orderRepo.save(order);
        await this.eventBus.publish('OrderCreated', { orderId: order.id, total: order.total });
    }
}
// Query — čtení z denormalizované view
class OrderQueryHandler {
    async getOrderSummary(orderId) {
        return this.readDb.query('SELECT * FROM order_views WHERE id = $1', [orderId]);
    }
}

Kdy použít

  • Ano: Vysoký poměr čtení vs zápis (90:10)
  • Ano: Složité dotazy přes více agregátů
  • Ne: Jednoduchý CRUD
  • Ne: Silná konzistence je kritická

Shrnutí

CQRS je mocný, ale zvyšuje komplexitu. Použijte tam, kde čtecí a zápisové požadavky jsou výrazně odlišné.

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