easy-flows源码研习
easy-flows源码研习
一、项目概述
1.原项目github地址:https://github.com/j-easy/easy-flows.git
2.easy-flows可以用非常简易的api创建常用的可组合的工作流。涵盖了四种逻辑的处理:
3.可以用如下方式构造循环工作流:
RepeatFlow repeatFlow = RepeatFlow.Builder.aNewRepeatFlow() .named("repeatflow") .repeat(work) .until(WorkPredicate.ALWAYS_FALSE) .build();
二、项目亮点
由于项目代码量小,决定手写一下慢慢品。个人感觉,easy-flows最好玩的地方在于Builder的构造。通过在Builder模式中进一步定义接口,细化了流程中的语义和步骤哦。
拿比较简单的顺序流SequentialFlow举例,通过ExecuteStep接口中的execute方法返回ThenStep。限制了链式调用过程中的then()方法在execute()之后。
public static class Builder { private Builder() { // force usage of static method aNewSequentialFlow } public static NameStep aNewSequentialFlow() { return new BuildSteps(); } public interface NameStep extends ExecuteStep { ExecuteStep named(String name); } public interface ExecuteStep { ThenStep execute(Work initialWork); ThenStep execute(List<Work> initialWorkUnits); } public interface ThenStep { ThenStep then(Work nextWork); ThenStep then(List<Work> nextWorkUnits); SequentialFlow build(); } private static class BuildSteps implements NameStep, ExecuteStep, ThenStep { private String name; private final List<Work> works; BuildSteps() { this.name = UUID.randomUUID().toString(); this.works = new ArrayList<>(); } …… @Override public SequentialFlow build() { return new SequentialFlow(this.name, this.works); } }
调用时如下:
SequentialFlow sequentialFlow = SequentialFlow.Builder.aNewSequentialFlow() .named("testFlow") .execute(work1) .then(work2) .then(work3) .build();
三、关于Mockito
1.Mockito 是一个强大的用于 Java 开发的模拟测试框架, 通过 Mockito 我们可以创建和配置 Mock 对象, 进而简化有外部依赖的类的测试.
2.使用 Mockito 的大致流程如下:
创建外部依赖的 Mock 对象, 然后将此 Mock 对象注入到测试类中.
执行测试代码.
校验测试代码是否执行正确.
3.Mockito 会追踪 Mock 对象的所用方法调用和调用方法时所传递的参数. 我们可以通过 verify() 静态方法来来校验指定的方法调用是否满足断言.
Mockito.verify(work, Mockito.times(n)).execute(workContext);
验证execute方法是否执行了n次;
Mockito.verify(nextOnPredicateSuccess, Mockito.times(1)).execute(workContext);
验证nextOnPredicateSuccess.execute()是否执行了1次;
Mockito.verify(nextOnPredicateFail, Mockito.never()).execute(workContext);
验证nextOnPredicateFail是否一次都没执行。
四、gitee地址
我的gitee地址: https://gitee.com/cathychen00/cathyjava-easyflows
我的文章会逐步公布到公众号,欢迎园友关注交流:
作者:陈敬(Cathy)
出处:http://www.cnblogs.com/janes/
博客文章仅供交流学习,请勿用于商业用途。如需转载,请务必注明出处。
来源https://www.cnblogs.com/janes/p/14764489.html