# ADR-007: Command/Result Pattern ## Status Accepted ## Context We need a clear way to express intent to change state, execute business operations, and handle failures without exceptions. ## Decision Use Command/Result pattern: - **Command**: Plain object (DTO) containing all data needed to execute - **Handler**: Contains orchestration logic, calls domain factories - **Result**: Explicit success/failure, no exceptions for business errors ``` CreateMissionCommand ↓ CreateMissionHandler ↓ Result ``` ## Consequences ### Positive - Clear intent: commands are named after use cases - Testable: handlers are pure functions with injected repositories - No exceptions for business logic - Audit trail: commands can be logged - Async-friendly ### Negative - More boilerplate than direct service calls - Need to handle Result type at every call site ## Related - ADR-006: In-Memory Adapters for Testing