💐复杂编排例子
经过上面几小章,你是不是已经大致了解了LiteFlow该如何编排了呢?
这章我们结合以上几个章节,来看下复杂流程编排的例子。
这章我们举两个比较复杂的例子。
# 复杂例子一
图示
上面这个图可以表示为以下的编排表达式:
<chain name="chain1">
THEN(
A,
WHEN(
THEN(B, C),
THEN(D, E, F),
THEN(
SWITCH(G).to(
THEN(H, I, WHEN(J, K)).id("t1"),
THEN(L, M).id("t2")
),
N
)
),
Z
);
</chain>
我相信大多数人应该能看懂,但是如果你如果用子变量再优化的话,会更加清晰,上面的可以优化成:
<chain name="chain1">
item1 = THEN(B, C);
item2 = THEN(D, E, F);
item3_1 = THEN(H, I, WHEN(J, K)).id("t1");
item3_2 = THEN(L, M).id("t2");
item3 = THEN(SWITCH(G).to(item3_1, item3_2), N);
THEN(
A,
WHEN(item1, item2, item3),
Z
);
</chain>
是不是清晰很多了?
如果你已经看懂上面这个例子,那我们再来看一个巨复杂的
# 复杂例子二
图示
上面这个图可以表示为以下的编排表达式:
<chain name="chain1">
THEN(
A,
SWITCH(B).to(
THEN(D, E, F).id("t1"),
THEN(
C,
WHEN(
THEN(
SWITCH(G).to(THEN(H, I).id("t2"), J),
K
),
THEN(L, M)
)
).id("t3")
),
Z
);
</chain>
这个表达式初看,我觉得一部分人会晕,括号都得数半天,当然如果你仔细研读的话,应该能看懂。
对于这种比较难以阅读的表达式来说,官方建议拆子流程或者拆子变量。下面我用拆子变量的方式优化下:
<chain name="chain1">
item1 = THEN(D, E, F).id("t1");
item2_1 = THEN(
SWITCH(G).to(
THEN(H, I).id("t2"),
J
),
K
);
item2_2 = THEN(L, M);
item2 = THEN(C, WHEN(item2_1, item2_2)).id("t3");
THEN(
A,
SWITCH(B).to(item1, item2),
Z
);
</chain>
提示
以上2个例子可在源码中的测试用例中找到,你可以运行并测试。
复杂案例一:com.yomahub.liteflow.test.complex.ComplexELSpringbootTest1
复杂案例二:com.yomahub.liteflow.test.complex.ComplexELSpringbootTest2
# 总结
LiteFlow的规则表达式语法简单,但是却可以描绘出大多数编排场景。努力让你的规则最大程度的简化。
在实际场景中,如果遇到复杂编排,完全可以使用子流程或者子变量来简化你的整个规则。让你的规则优雅且更容易阅读!
帮助我们改善此文档 (opens new window)
上次更新: 2023/08/04, 17:02:03