有没有更好的方法来通过向导对话框处理进展?

时间:2010-09-03 17:38:37

标签: c# wizard

我正在开发一个现有的向导对话框,该对话框实现为选项卡式页面控件(隐藏了选项卡)。向导的步骤以枚举类型定义。当用户单击导航按钮时,当前步骤通过switch语句运行。交换机的每个分支都填充了额外的分支逻辑(if / then / else),这保存了各种用户选择的状态并指定了下一步(不一定是顺序的,也不一定与显示的标签页重合)用户)。

当前步骤被修改时,它会触发一个额外的switch语句来更新UI(更改标签页,启用/禁用控件等)。

实现后,向导对更改非常敏感,需要大量调试。我不禁觉得有更好的方法来设计它。有什么建议吗?

4 个答案:

答案 0 :(得分:0)

我没有足够的代表添加评论所以我必须发布这个作为答案,它不是!来自之前的stackoverflow帖子:

Methods of simplifying ugly nested if-else trees in C#

我只是认为这可能是相关的。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

作为一般的起始规则,我认为步骤本身并不存储信息。他们也不允许彼此交谈。它们具有指向包含信息的Model对象的指针。我不遵循MVC或MVP模式,但我确实将模型从UI中严格控制。

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

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

答案 3 :(得分:0)

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

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