event-driven

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Event-Driven — Event Sourcing, Saga, CQRS

事件驱动架构 — Event Sourcing、Saga、CQRS

Architecture événementielle pour découplage et scalabilité.
事件驱动架构用于实现解耦与可扩展性。

Patterns

模式

Event Sourcing — Stocker events, pas état (audit, replay)
CQRS — Séparer Read/Write models (projections)
Saga — Transaction distribuée (microservices)
Event Bus — Pub/Sub découplé (Kafka, RabbitMQ)
Event Sourcing — 存储事件而非状态(支持审计、重放)
CQRS — 分离读写模型(投影)
Saga — 分布式事务(微服务场景)
Event Bus — 解耦的发布/订阅(Kafka、RabbitMQ)

Event Sourcing

Event Sourcing

python
events = [OrderCreated(...), OrderPaid(...), OrderShipped(...)]

def rebuild(events):
    state = {}
    for e in events: state = apply(state, e)
    return state
python
events = [OrderCreated(...), OrderPaid(...), OrderShipped(...)]

def rebuild(events):
    state = {}
    for e in events: state = apply(state, e)
    return state

Saga — Choreography vs Orchestration

Saga — 编排模式 vs 指挥模式

Choreography — Events chain services (découplé, debug dur)
Orchestration — Central coordinator (visible, couplé)
Choreo: OrderCreated → Payment → Shipping
Orchestrator: ProcessPayment() → ShipOrder()
编排模式(Choreography) — 事件串联服务(解耦,但调试困难)
指挥模式(Orchestration) — 中央协调器(可视化,但耦合度高)
Choreo: OrderCreated → Payment → Shipping
Orchestrator: ProcessPayment() → ShipOrder()

Kafka Event Bus

Kafka Event Bus

javascript
// Producer
producer.send({ topic: 'orders', messages: [{ ... }] });

// Consumer
consumer.run({
  eachMessage: async ({ message }) => {
    handleEvent(JSON.parse(message.value));
  }
});
javascript
// Producer
producer.send({ topic: 'orders', messages: [{ ... }] });

// Consumer
consumer.run({
  eachMessage: async ({ message }) => {
    handleEvent(JSON.parse(message.value));
  }
});

Domain Events (Symfony)

领域事件(Symfony)

php
class OrderCreatedEvent {
    public function __construct(public Order $order) {}
}

class SendEmail {
    public function __invoke(OrderCreatedEvent $e) {
        $this->mailer->send($e->order->email, 'Confirmation');
    }
}

Voir
@.claude/rules/21-cqrs.md
,
@.claude/skills/async/SKILL.md
php
class OrderCreatedEvent {
    public function __construct(public Order $order) {}
}

class SendEmail {
    public function __invoke(OrderCreatedEvent $e) {
        $this->mailer->send($e->order->email, 'Confirmation');
    }
}

参考
@.claude/rules/21-cqrs.md
,
@.claude/skills/async/SKILL.md