Core Concepts
Operation、Value、Outcome、Journal、Context、Execution Strategyの関係を理解する。
BlackOpsは、Applicationの意図を表すOperationを中心に、型付きInput/Output、Execution Strategy、追跡Context、Lifecycle Journalを組み合わせます。
OperationはOperationValueを第一引数に受け取り、必要な場合だけExecutionContextを第二引数に受け取ります。Execution Strategyは同じOperationをInlineまたはDeferredで実行する経路を選びます。正常完了するとOutcomeを返し、受付からTerminal StateまでのLifecycle上の事実はJournalへ追記されます。
Operation
Applicationが実行したい一つの意図と処理単位です。Typed Self-handled形式ではOperation自身がhandle()を持ちます。HTTP Controller、CLI Command、WorkerはOperationを呼び出す入口であり、Operationそのものではありません。
OperationValue
HTTP等の入力を型付きで受け取るOperation Inputです。Validationと#[Sensitive] Metadataの境界になります。handle()の第一引数にはOperationValueを実装した具象Classを指定します。
Outcome
Operationが正常完了したときの型付きOutputです。InlineではResponseへ変換でき、DeferredではOperation IDから後で取得できます。Presentation形式そのものではないため、HTTP Adapterは必要に応じてJSONへ変換します。
Journal
Operation Lifecycleで起きた事実を順序付きで追記するRecord列です。Application LogやDeferred Transport Payloadとは責務が異なり、operation.received、attempt.started、operation.completed等をOperation IDで追跡できます。
ExecutionContext
Operation ID、Correlation、Causation、Attempt等、追跡と伝播に必要なRead-only Metadataです。Frameworkが生成し、Operationは必要な場合だけhandle()の第二引数から読み取ります。
Execution Strategy
同じOperationをRequest内で実行するInlineか、Durable受付後にWorkerが実行するDeferredかを選ぶ境界です。Strategyが変わってもOperationValue、Operation、Outcomeの型は変わりません。
次はLifecycleで受付、Attempt、Retry、Terminal Stateの違いを確認し、JournalでCanonicalとObservedの記録境界を確認します。用語をまとめて確認する場合はGlossaryを参照してください。