|
1 | 1 |
|
2 | 2 | ### 3.5.0 |
3 | 3 |
|
| 4 | + |
| 5 | +本次更新,主要统一了“无状态”、“有状态”流程的基础:引擎、驱动。通过上下文来识别是否为有状态及相关支持。 |
| 6 | + |
| 7 | +FlowContext 改为接口,增加了两个重要的方法: |
| 8 | + |
| 9 | +```java |
| 10 | +boolean isStateful(); |
| 11 | +StatefulSupporter statefulSupporter(); |
| 12 | +``` |
| 13 | + |
| 14 | +且,FlowContext 做了分离。解决了,之前在实例范围内不可复用的问题。 |
| 15 | + |
| 16 | + |
| 17 | +#### 兼容说明 |
| 18 | + |
| 19 | +* stateful 相关概念与接口有调整 |
| 20 | +* FlowContext 改为接口,并移除 result 字段(所有数据基于 model 交换) |
| 21 | +* FlowContext 内置实现分为:StatelessFlowContext 和 StatefulFlowContext。通过 `FlowContext.of(...)` 实例化。(也可按需定制) |
| 22 | +* StateRepository 接口的方法命名调整,与 StatefulSupporter 保持一致性 |
| 23 | + |
| 24 | +升级请做好调整与测试。 |
| 25 | + |
| 26 | +#### 具体更新 |
| 27 | + |
| 28 | + |
4 | 29 | * 添加 solon-flow FlowDriver:postHandleTask 方法 |
5 | 30 | * 添加 solon-flow FlowContext:exchanger 方法(可获取 FlowExchanger 实例) |
6 | 31 | * 调整 solon-flow FlowContext 拆分为:FlowContext(对外) 和 FlowExchanger(对内) |
7 | 32 | * 调整 solon-flow FlowContext 移除 result 字段(所有数据基于 model 交换) |
8 | 33 | * 调整 solon-flow FlowContext get 改为返回 Object(之前为 T),新增 getAs 返回 T(解决 get 不能直接打印的问题) |
9 | 34 | * 调整 solon-flow 移除 StatefulSimpleFlowDriver 功能合并到 SimpleFlowDriver(简化) |
10 | | -* 调整 solon-flow 新增 stateless 包,明确有状态与无状态这两个概念(StatelessFlowContext 更名为 StatefulFlowContext) |
| 35 | +* 调整 solon-flow 新增 stateless 包,明确 “有状态” 与 “无状态” 这两个概念(StatelessFlowContext 和 StatefulFlowContext) |
11 | 36 | * 调整 solon-flow FlowStatefulService 接口,每个方法的 context 参数移到最后位(保持一致性) |
12 | 37 | * 调整 solon-flow 新增 StatefulSupporter 接口,方便 FlowContext 完整的状态控制 |
13 | 38 | * 调整 solon-flow StateRepository 接口的方法命名,与 StatefulSupporter 保持一致性 |
14 | 39 | * 调整 solon-flow Chain 拆分为:Chain 和 ChainDecl |
15 | 40 |
|
16 | | -新定位: |
| 41 | +两对拆分类的定位: |
17 | 42 |
|
18 | 43 | * FlowContext 侧重对外,可复用(用于传参、策略,状态) |
19 | 44 | * FlowExchanger 侧重对内,不可复用(用于控制、中间临时状态或变量) |
20 | 45 | * Chain 为运行态(不可修改) |
21 | 46 | * ChainDecl 为声明或配置态(可以随时修改) |
22 | 47 |
|
23 | 48 |
|
24 | | -FlowContext 改成接口之后,实例化方式建议: |
| 49 | +应用示例: |
25 | 50 |
|
26 | 51 | ```java |
27 | | -FlowContext context = FlowContext.of(); //有四个生栽方法,包括:无状态 和 有状态 |
| 52 | +//FlowContext 构建 |
| 53 | +FlowContext context = FlowContext.of(); //无状态的 |
| 54 | +FlowContext context = FlowContext.of("1", stateController); //有状态控制的 |
| 55 | +FlowContext context = FlowContext.of("1", stateController, stateRepository); //有状态控制的和状态持久化的 |
| 56 | + |
| 57 | + |
| 58 | +//Chain 手动声明 |
| 59 | +Chain chain = new ChainDecl("d3", "风控计算").create(decl->{ |
| 60 | + decl.addNode(NodeDecl.startOf("s").linkAdd("n2")); |
| 61 | + decl.addNode(NodeDecl.activityOf("n1").title("基本信息评分").linkAdd("g1").task("@base_score")); |
| 62 | + decl.addNode(NodeDecl.exclusiveOf("g1").title("分流") |
| 63 | + .linkAdd("e", l -> l.title("优质用户(评分90以上)").condition("score > 90")) |
| 64 | + .linkAdd("n2", l -> l.title("普通用户")) //没条件时,做为默认 |
| 65 | + ); |
| 66 | + decl.addNode(NodeDecl.activityOf("n2").title("电商消费评分").linkAdd("n3").task("@ec_score")); |
| 67 | + decl.addNode(NodeDecl.activityOf("n3").title("黑名单检测").linkAdd("e").task("@bl_score")); |
| 68 | + decl.addNode(NodeDecl.endOf("e").task(".")); |
| 69 | + }); |
28 | 70 | ``` |
29 | 71 |
|
30 | 72 | ### 3.4.3 |
|
0 commit comments