easy-flows源碼研習
一、項目概述
1.原項目github地址://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地址: //gitee.com/cathychen00/cathyjava-easyflows
我的文章會逐步公布到公眾號,歡迎園友關注交流: