用Java DSL定义工作流程
#开源 #java #workflow #dsl

工作流程通常被视为协调系统的一种方式。但这只是用途之一。工作流确实擅长表达业务逻辑以提高对实现的逻辑的可见性。

但是问题是如何定义工作流?

在许多情况下,工作流程表示为模型,例如流程图。这也需要建模工具,这并不总是开发人员想要做的。

因此,为了帮助开发人员进入工作流的世界,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将把此工作流程公开为服务。

Service API built from workflow definition

除此之外,工作流程图还将基于上述工作流定义生成。

Workflow definition diagram

只有几行工作流DSL开发人员不仅可以以描述性方式定义业务逻辑,而且还可以从框服务API和每个实例的执行中可视化。

这只是对工作流Java DSL的非常简单的介绍,可以在Automatiko documentation中找到更完整的入门指南,我鼓励您尝试一下并尝试一下。

如果您有一些有趣的用例,可以挑战工作流程,我将很乐意尝试一下!让我们看看可以花多远以涵盖业务逻辑。

最后,一个简短的视频演示了自动机工作流Java DSL