

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 變更決策者程式碼：版本控制和功能標記
<a name="java-flow-making-changes-decider-code"></a>

本節顯示如何使用兩種方法避免對決策者進行回溯不相容變更：
+ [版本控制](java-flow-making-changes-solutions.md#use-versioning)提供基本解決方案。
+ [含功能標記的版本控制](java-flow-making-changes-solutions.md#use-feature-flags)是以版本控制解決方案為基礎：未介紹工作流程的新版本，而且不需要推送新程式碼來更新版本。

在您嘗試這些解決方案之前，請熟讀「[範例藍本](java-flow-making-changes-example-scenario.md)」小節，其中說明回溯不相容決策者變更的原因和影響。

## 重播程序和程式碼變更
<a name="replay-process-code-changes"></a>

當 AWS Flow Framework for Java 決策者工作者執行決策任務時，必須先重建執行的目前狀態，才能新增步驟。決策者使用稱為「重播」**的程序來執行這項作業。

重播程序會從頭重新執行決策者程式碼，同時瀏覽已發生事件的歷史記錄。瀏覽事件歷史記錄可允許框架對訊號或任務完成做出反應，並解鎖程式碼中的 `Promise` 物件。

當架構執行決策者程式碼時，它會透過遞增計數器，將 ID 指派給每個排程任務 （活動、Lambda 函數、計時器、子工作流程或傳出訊號）。框架會將此 ID 傳達給 Amazon SWF，並將 ID 新增至歷史記錄事件，例如 `ActivityTaskCompleted`。

為使重播程序成功，確定決策者程式碼十分重要，以及針對每個工作流程執行中的每個決策，依相同順序排定相同任務。如果您未遵守此需求，則框架可能會無法比對 `ActivityTaskCompleted` 事件中的 ID 與現有 `Promise` 物件。