2010-09-03 62 views
1

我正在使用作为选项卡式页面控件实现的现有向导对话框(隐藏了选项卡)。向导的步骤以枚举类型定义。当用户单击导航按钮时,当前步骤将通过switch语句运行。交换机的每个分支都充满了额外的分支逻辑(如果/ then/else),它保存了各种用户选择的状态并分配下一步(这不一定是顺序的,并且不一定与显示的标签页一致用户)。有没有更好的方法通过向导对话来处理进展?

当当前步骤中被修改它触发哪个更新UI附加开关语句(变化标签页上,使能/禁止控制等)

作为实现该向导以变化非常敏感,并需要大量的的调试。我不禁感到有更好的方式来设计它。有什么建议么?

+0

这到底是什么?一个安装或创建的东西? – Woot4Moo 2010-09-03 17:48:30

+0

@Woot:这个特定的向导是一个数据导入向导,但在应用程序中有许多其他类似设计的向导。所以如果我听到更好的建议,我会将它应用到所有这些建议中。 – 2010-09-03 17:57:19

回答

0

在这个时间点上,我的建议是建立一个小概念验证(poc),以表明您可以将当前形式的向导迁移到更精心设计的系统。从发展的角度来看,我会建议构建poc以匹配用户在名称和元素方面看到的内容。此外,您需要记录对象在每个页面传递时的状态,以防用户返回跟踪或执行其他操作。另一个可能有用的方面是实现一个规则引擎,比如DROOLS或JBoss规则,因为它最后一次检查。有一种算法,我不记得在那个时候真的会有助于性能。因此,要回顾:
1)创建一个小的POC
2)使用有状态
3个对象)寻找一个良好的规则引擎
4)获得批准做所有这些事情。
我应该补充一下,我意识到你之前在整个重写过程中都被烧毁了,但这只是一个模块而不是整个企业。

0

我最近在我们的应用程序中实现了一个设计来解决类似的问题。我们的应用程序适用于需要可变步骤组合完成的工作流程。

作为一般的起始规则,我决定这些步骤本身不存储信息。他们也不允许彼此交谈。他们有指向保存信息的Model对象的指针。我没有遵循MVC或MVP模式,但我确实严格遵守了与UI分离的模型。

每个工作流步骤都有一个OnEnter(bool forward)OnExit(bool forward)方法,它们需要实施。在这些中,您可以查询模型来更新控件,反之亦然。 从一个步骤移到另一个步骤是由StateEngine完成的。它在所有已完成的步骤中保留一个堆栈,并且当按下后退按钮时,当前状态为Exit ed,前一个为Enter ed。引擎有一个默认顺序的概念,所以大多数步骤只是要求StateEngine转移到下一个步骤,不管它是什么,但是如果您要求它移动到特定的一个,它会这样做。

在这个设计之前,一个主要的维护疼痛已经在工作流程中退步了,这在设计中几乎可以自动修复。这个设计并没有解决世界饥饿问题,但它保持了向导代码的可管理性。

0

我在我的职业生涯中用很多不同的语言做了大量的向导。通常对我来说更好的方法是拥有某种父容器,并且每个步骤位于不同的类/组件中。触发机制(next-prev类型的按钮)向管理器发送消息以替换容器中的内容。

现在我正在做另一个向导,这次我使用Actipro的WPF组件,它看起来不错。简单而有效。

相关问题