

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 对决策程序代码进行更改：版本控制和功能标志
<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>

当 f AWS Flow Framework or Java 决策者执行决策任务时，它必须先重建执行的当前状态，然后才能向其添加步骤。决策程序使用称为*重播* 的过程执行该操作。

重播过程从头重新开始执行决策程序代码，同时浏览已发生的事件的历史记录。通过浏览事件历史记录，该框架可以对信号或任务完成作出反应，并在代码中取消阻止 `Promise` 对象。

在执行决策程序代码时，该框架会增加计数器，以便为每个安排的任务（活动、Lambda 函数、计时器、子工作流或传出信号）分配一个 ID。该框架向 Amazon SWF 通报该 ID，并将该 ID 添加到历史事件中，如 `ActivityTaskCompleted`。

要成功完成重播过程，请务必使决策程序代码是确定性的，并按相同顺序为每个工作流程执行中的每个决策计划相同的任务。例如，如果不符合该要求，该框架可能无法将 `ActivityTaskCompleted` 事件中的 ID 与现有 `Promise` 对象相匹配。