工作流程通常被视为协调系统的一种方式。但这只是用途之一。工作流确实擅长表达业务逻辑以提高对实现的逻辑的可见性。
但是问题是如何定义工作流?
在许多情况下,工作流程表示为模型,例如流程图。这也需要建模工具,这并不总是开发人员想要做的。
因此,为了帮助开发人员进入工作流的世界,Automatiko(一种开源工具包,用于构建基于工作流的服务和功能),最近引入了Workflow Java DSL。
此域特定的语言(DSL)带有像API一样方便的语言来定义工作流。它与任何IDE都很好地集成在一起,可为任何开发人员提供简单的切入点。
让我们快速了解它的基础
@Workflows
public class MyWorkflows {
public WorkflowBuilder splitAndJoin() {
WorkflowBuilder builder = WorkflowBuilder.newWorkflow("splitAndJoin", "Sample workflow with exclusive split and join");
String x = builder.dataObject(String.class, "x");
String y = builder.dataObject(String.class, "y");
SplitNodeBuilder split = builder.start("start here").then()
.log("log values", "X is {} and Y is {}", "x", "y")
.thenSplit("split");
JoinNodeBuilder join = split.when(() -> x != null).log("first branch", "first branch").thenJoin("join");
split.when(() -> y != null).log("second branch", "second branch").thenJoin("join");
join.then().log("after join", "joined").then().end("done");
return builder;
}
}
这里要注意的几个重要方面:
-
@Workflows
指示注释的类,为每种返回WorkflowBuilder
的公共方法创建服务API -
splitAndJoin
方法定义了一个简单的工作流程- 声明两个数据对象
x
和类型字符串的y
- 第一件事它记录两个数据对象的值
- 然后,它根据数据对象的值而分成不同的路径
- 然后加入它
- 记录消息
- 结束工作流
- 声明两个数据对象
基于此工作流定义,构建时间的自动机将生成一个完全特色的(REST)服务API,该API将把此工作流程公开为服务。
除此之外,工作流程图还将基于上述工作流定义生成。
只有几行工作流DSL开发人员不仅可以以描述性方式定义业务逻辑,而且还可以从框服务API和每个实例的执行中可视化。
这只是对工作流Java DSL的非常简单的介绍,可以在Automatiko documentation中找到更完整的入门指南,我鼓励您尝试一下并尝试一下。
如果您有一些有趣的用例,可以挑战工作流程,我将很乐意尝试一下!让我们看看可以花多远以涵盖业务逻辑。
最后,一个简短的视频演示了自动机工作流Java DSL