Commands vs Events vs Queries
Command: intent to change state — may be rejected
PlaceOrder(customer_id, items, payment_info)
CancelOrder(order_id, reason)
Event: something that happened — cannot be rejected (it already occurred)
OrderPlaced(order_id, customer_id, items, total, at)
OrderCancelled(order_id, reason, at)
Query: read without side effects — always succeeds
GetOrderById(order_id) → Order
GetOrdersForCustomer(customer_id) → [Order]