简述:有没有已知的设计模式可以将状态机配置表示为代码,而不使用goto
语句?
重构可能存在的问题:
{
a: {
title: 'Step A',
onActionXGoTo: 'b',
onActionYGoTo: 'c',
},
b: {
title: 'Step B',
onAnyActionGoTo: 'c',
}
c: {
title: 'Step C',
onActionXGoTo: 'a',
onActionYGoTo: 'b',
}
}
如下示例所示。其中buildGraph
将返回上述对象
buildGraph((builder) => {
builder.while(() => {
if (builder.initial() {
builder.setStep({ title: 'Step A'});
} else {
if (builder.isActionX()) {
builder.setStep({ title: 'Step A'});
}
if (builder.isActionY()) {
builder.setStep({ title: 'Step B'});
}
}
if (builder.isActionX()) {
builder.setStep({ title: 'Step B'});
builder.setStep({ title: 'Step C'});
}
if (builder.isActionY()) {
builder.setStep({ title: 'Step C'});
}
});
});
这个用例可能不太合理,因为它更难跟踪。但是,我们有一个状态机,其中有数百个连接,很难维护。
- 是否有任何设计模式可以帮助解决这个问题?
- UX/产品给出的状态机规范采用了goto语句。将goto语句转换为顺序代码可能并不值得,因为在实现新状态机时会增加复杂性。我是否忽略了其他方面?
- 将这种类型的顺序代码转换成状态机是否有任何注意事项?表面上看起来可能像是将代码编译成自定义的机器码,但我认为这里的区别在于它是有限状态机而不是代码。