阅读 123

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

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐