【问题标题】:Is there a better way to handle the progression through a wizard dialog?有没有更好的方法来通过向导对话框处理进度?
【发布时间】:2011-04-07 23:31:00
【问题描述】:

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

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

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

【问题讨论】:

  • 这到底是干什么用的?安装还是创作?
  • @Woot:这个特定的向导是一个数据导入向导,但应用程序中还有许多其他具有类似设计的向导。因此,如果我听到更好的建议,我会将其应用于所有人。

标签: c# wizard


【解决方案1】:

我没有足够的代表来添加评论,所以我必须将此作为答案发布,但事实并非如此!来自之前的 stackoverflow 帖子:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      作为一般起始规则,我决定步骤本身不存储信息。他们也不允许互相交谈。它们具有指向保存信息的模型对象的指针。我不遵循 MVC 或 MVP 模式,但我确实将模型与 UI 严格分开。

      每个工作流程步骤都有一个OnEnter(bool forward)OnExit(bool forward) 方法,它们需要实现。在这些中,您查询模型以更新您的控件,反之亦然。 从一个步骤移动到另一个步骤是由StateEngine 完成的编。引擎有一个默认顺序的概念,所以大多数步骤只是要求StateEngine 移动到下一步,不管它是什么,但如果你要求它移动到特定的顺序,它会这样做。

      在此设计之前,主要的维护难题是在工作流程中后退,这在此设计中几乎自动得到解决。该设计并没有解决世界饥饿问题,但它使向导代码易于管理。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2012-02-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-09
          • 1970-01-01
          • 1970-01-01
          • 2013-01-01
          • 1970-01-01
          • 2011-08-06
          相关资源
          最近更新 更多