工作流引擎的Java实现

标签 java

我正在开发的自制工作流框架为执行工作流所需调用的每个任务实例化一个类。更多的任务数量=更多的要创建的类数量。如何对此进行优化?我不想为每一项任务创建一个类。

例如。

Class MyWorkflow {
 public List < Task > getTasks() {
  return new ArrayList < Task > (
   Arrays.asList(new Task1(),
    new Task2(),
    new Task3(),
   )
  );
 }
}

最佳答案

如果支持一项常规任务过于通用,则可能有一个任务,或者至少有几个定义的任务类。 Varargs 允许您根据操作的需要传递实体 ID 等。或者传递 Employee.class 而不是对象?

public class TaskRunner {

 public List <Task> getTasks() {
      return new ArrayList <Task> (
       Arrays.asList(new Task(new Employee(), TaskOperation.Delete, "10"),
        new Task(new Employee(), TaskOperation.Retrieve, "15")
       )
      );
     }
}

public enum TaskOperation {
   Create,
   Delete,
   Update,
   Retrieve;
}

public class Task implements Runnable {

private final Object entity;
private final TaskOperation operation;

public Task(Object entity, TaskOperation operation, String... args) {
    super();
    this.entity = entity;
    this.operation = operation;
}

@Override
public void run() {

    // EmployeeDAO employeeDAO = ...

    if (entity instanceof Employee) {
        switch(operation) {
        case Create:
            // Perform Create on Employee
            // Employee e = new Employee();
            // employeeDAO.create(...);
            break;
        case Delete:
            // Perform Delete on Employee
            break;
        }
        // ....
    }
  }
}

关于工作流引擎的Java实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34687605/

相关文章:

Java应用命令行启动

java - 使用 uinput 驱动程序创建虚拟多点触控设备

java - 我如何反省 freemarker 模板以找出它使用的变量?

java - 使用单例访问 "constant global array"是否正确?

java - 从 HashMap 中删除对象后程序挂起?

java - 漏洞!阶段 'semantic analysis' 中的异常

java - @KafkaListener 不会读取以前的消息,即使它们没有被确认,除非应用程序重新启动

java - 手动强制垃圾收集

java - 我可以使用 Headless JS 调用类中的函数吗? React-Native 安卓

java - 不尊重插图