我有一个Activiti项目用于业务流程。
问题是关于迁移的。现有流程有一些未完成的任务。我想通过添加新步骤来修改现有流程。
现在,当我创建一个新任务时,这个新任务将根据更新后的流程进行处理。而未完成的任务将根据旧流程进行处理。
让我们以以下示例为例:https://spring.io/blog/2015/03/08/getting-started-with-activiti-and-spring-boot 在此示例中,请考虑以下行:
假设我有一些业务逻辑代码,其中我检查此变量的值,例如:
问题是关于迁移的。现有流程有一些未完成的任务。我想通过添加新步骤来修改现有流程。
现在,当我创建一个新任务时,这个新任务将根据更新后的流程进行处理。而未完成的任务将根据旧流程进行处理。
让我们以以下示例为例:https://spring.io/blog/2015/03/08/getting-started-with-activiti-and-spring-boot 在此示例中,请考虑以下行:
taskVariables.put("telephoneInterviewOutcome", true);
假设我有一些业务逻辑代码,其中我检查此变量的值,例如:
if (taskVariables.get("telephoneInterviewOutcome") == true) {...}
现在假设我想把这个变量从布尔类型改成枚举类型。那么,我需要同时更新我的业务逻辑:
if (taskVariables.get("telephoneInterviewOutcome") == SOMEENUM) {...}
现在,我的业务逻辑代码需要根据正在处理的任务流程版本进行分支。如果任务属于流程的第一版,则我将使用第一条语句,否则使用第二条语句:
if (getProcessVersion(task) == 1) {
if (taskVariables.get("telephoneInterviewOutcome") == true) {...}
} else {
if (taskVariables.get("telephoneInterviewOutcome") == SOMEENUM) {...}
}
这种方法的问题在于,随着流程的更新,业务逻辑代码会变得越来越庞大。这会导致生产过程中出现很多错误。
有没有其他解决方案可以避免修改业务逻辑代码的情况下解决这个问题呢?