用于表示工作流的类结构

时间:2014-06-25 11:43:33

标签: java linked-list uml workflow sequence

在Java类结构中表示工作流的最佳方式是什么(工作流被视为一系列操作)?让我们假设一个类Workflow包含Action对象。我认为通过使用LinkedList可以做到这一点,但是不能进行分支。

我的目标是表示一个类似于UML活动图的结构,这意味着它也应该可以定义desicions,splits和join。

另一个观点是使用BuildingBlocks的LinkedList,它定义了一个接口。然后创建其他类来定义实现此接口的Desicions和Splits或Joins(拆分和连接可以表示为一个容器,其中包含使用BuildingBlocks的其他LinkedLists)

您如何看待这个想法,还是您知道更好的解决方案?

如果您进一步了解我可以用于谷歌搜索的“关键词”,请不要犹豫,发布它们!

2 个答案:

答案 0 :(得分:3)

我建议您查看Microsoft在Windows Workflow Foundation平台实现中使用的类层次结构(而不​​是完全重新发明轮子)

源代码已打开供检查,请参阅例如http://referencesource.microsoft.com/#System.Activities/System/Activities/Statements/FlowSwitch.cs

他们已经考虑过使用图形语言等Workflow Designer

corresponding Mono project

的状态所述,Windows操作系统以外的Workflow Foundation平台不易提供

因此,如果您的目标操作系统是Windows,那么您可以使用.NET。如果您的目标平台不是Windows,那么您至少可以看看。 C#和Java是复制/粘贴友好语言。

答案 1 :(得分:1)

我会使用某种strategy模式和一些代表Hops的抽象。

interface Hop{
 List<Hop> backwardHops();
 List<Hop> forwardHops();
}

abstract class AbstractHop implements Hop{
 private String name;
 public String getName(){
 return this.name;
 }
} 

class ConcreteHop extends AbstractHop{
  // method implementations
  // to return the available backward and forward hops from this hop 
}

class MyObjectWithCurrentFlow {
 private AbstractHop currentHop;
 // the initial hop or current workflow
 MyObjectWithCurrentFlow(AbstractHop currentHop){
 this.currentHop = currentHop;
 }
 // strategy pattern goes here
 void pushItBackwardOrForward(AbstractHop newHop){
   // check if this hop is a valid hop
   this.currentHop = newHop;
 }
}