在java类结构中表示工作流的最佳方式是什么(工作流被视为一系列动作)?让我们假设一个类Workflow包含动作对象。我原以为用LinkedList就可以做到,但这样就没有分支了。
我的目标是表示一个类似于UML活动图的结构,这意味着它也应该可以定义决策、分割和连接。
另一个解决方案是使用BuildingBlocks的LinkedList,它定义了一个接口。然后创建其他类来定义实现此接口的决策和分割或连接(分割和连接可以表示为一个容器,其中包含带有BuildingBlocks的进一步LinkedLists)
你觉得这个想法怎么样,或者你知道更好的解决方案吗?
如果你知道更多的"关键字",我可以用谷歌搜索有关这个主题,请不要犹豫发布他们!
我建议看看微软在实现Windows Workflow Foundation平台时使用的类层次结构(而不是完全重新发明轮子)
源代码是开放供检查的,参见例如http://referencesource.microsoft.com/#System.Activities/System/Activities/Statements/FlowSwitch.cs
他们已经考虑了工作流设计器与图形语言等。
Workflow Foundation平台在Windows操作系统之外是不可用的,正如在相应的Mono项目状态中所说的
所以如果你的目标操作系统是Windows,那么你可以只使用。net。如果你的目标平台不是windows,那么你至少可以考虑一下。c#和Java是复制/粘贴友好的语言。
我会使用某种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;
}
}