在Java类结构中表示工作流的最佳方式是什么(工作流被视为一系列操作)?让我们假设一个类Workflow包含Action对象。我认为通过使用LinkedList可以做到这一点,但是不能进行分支。
我的目标是表示一个类似于UML活动图的结构,这意味着它也应该可以定义desicions,splits和join。
另一个观点是使用BuildingBlocks的LinkedList,它定义了一个接口。然后创建其他类来定义实现此接口的Desicions和Splits或Joins(拆分和连接可以表示为一个容器,其中包含使用BuildingBlocks的其他LinkedLists)
您如何看待这个想法,还是您知道更好的解决方案?
如果您进一步了解我可以用于谷歌搜索的“关键词”,请不要犹豫,发布它们!
答案 0 :(得分:3)
我建议您查看Microsoft在Windows Workflow Foundation平台实现中使用的类层次结构(而不是完全重新发明轮子)
源代码已打开供检查,请参阅例如http://referencesource.microsoft.com/#System.Activities/System/Activities/Statements/FlowSwitch.cs
他们已经考虑过使用图形语言等Workflow Designer。
的状态所述,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;
}
}