代码之家  ›  专栏  ›  技术社区  ›  Kenneth Cochran

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

  •  1
  • Kenneth Cochran  · 技术社区  · 16 年前

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

    当修改当前步骤时,它会触发一个附加的switch语句来更新UI(change tab page、enable/disable controls等)

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

    4 回复  |  直到 13 年前
        1
  •  0
  •   Community Mohan Dere    9 年前

    我没有足够的代表来添加评论,所以我将不得不把这作为一个答案,它不是!从上一个stackoverflow帖子:

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

    我只是觉得可能有关系。

        2
  •  0
  •   Woot4Moo    16 年前

    此时,我的建议是构建一个小型概念证明(poc),以表明您可以将当前形式的向导迁移到设计得更好的系统中。从开发的角度来看,我建议构建poc以匹配用户在名称和元素方面看到的内容。此外,您还需要记录对象在传递到每个页面时的状态,以防用户返回跟踪或执行其他操作。另一个可能有帮助的领域是实现一个规则引擎,比如DROOLS,或者JBoss规则,就像我上次检查的那样。有一个算法,我不能记得当时,这将真正有助于性能。概括一下:
    1)创建一个小poc
    2)使用具有状态的对象
    3)寻找一个好的规则引擎
    4)所有这些事情都要得到批准。
    我要补充的是我意识到你之前被烧掉的全部重写的事情,但这只是一个模块而不是整个企业。

        3
  •  0
  •   user180326user180326    16 年前

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

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

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

    在这个设计之前,一个主要的维护难题是退回到工作流中,这个问题在这个设计中几乎是自动解决的。这个设计并没有解决世界的饥饿感,但它保持了巫师代码的可管理性。

        4
  •  0
  •   Padu Merloti    16 年前

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

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

    推荐文章