【问题标题】:DesignPatterns: Which is most appropriate to use for a wizard style user interface?设计模式:哪个最适合用于向导风格的用户界面?
【发布时间】:2010-10-20 04:57:29
【问题描述】:

我正在实现一个向导风格的用户界面。当用户浏览向导时,单击下一步,根据他们在每个屏幕上选择的选项,用户将必须经过一组特定的向导屏幕。

这是在 ASP.NET MVC 中构建的。我想知道哪种设计模式最适合实现向导中步骤序列的逻辑。同样,根据他们所做的选择,他们有多个通过向导的路径。

我可以使用链表吗? “Command Design Pattern”?你有什么推荐的?

换句话说:您在哪里/如何根据用户在向导的特定步骤中选择的内容来抽象/封装确定向导中下一步是什么的逻辑?

【问题讨论】:

    标签: asp.net-mvc design-patterns wizard


    【解决方案1】:

    我喜欢保持简单。我使用步骤编号在我正在构建的对象上设置一个值,因此如果我正在构建保险单,我将在保单上有一个属性,指示它所处的步骤。然后我有一个方法,即路由器,查看策略并确定下一步将其发送到哪里,您可以在路由器中构建额外的逻辑以跳过步骤,或者您可以将逻辑放在每个步骤方法中并重定向回路由器方法。

    【讨论】:

      【解决方案2】:

      换句话说:您在哪里/如何根据用户在向导的特定步骤中选择的内容来抽象/封装确定向导中下一步是什么的逻辑?

      一种方法是对 Wizard、Step 和 Product 类进行建模。也许是这样的?

      public class Wizard
      {
        public Step forward() {//...}
      
        public Step backward() {//...}
      
        public Step current() {//...}
      
        public Product getProduct() {//...}
      }
      
      public class Step
      {
        public String name() {//...}
      
        public void commit(Product product) {//...}
      
        public void rollback(Product product) {//...}
      }
      
      public class Product
      {
        //...
      }
      

      向导的目的是构建产品(汽车、电脑、假期等)。

      在这种情况下,由向导决定下一步 - 可能基于向导正在构建的产品状态。 Wizard 将在 UI 的控制下像 Builder 一样行事,这将是 Director 并告诉 Wizard 何时以及向哪个方向进行转换。由向导决定下一步实际上是什么。可以支持多个分支点,但该实现将隐藏在 Wizard 中。

      Step 将是具有撤消/重做功能的 Command Pattern 的一个实例。

      【讨论】:

        【解决方案3】:

        我必须同意 Beau。

        实际上,如果您需要一组复杂的导航逻辑规则,那么您有一个 GUI 向导,但没有后台向导。

        如果尝试构建的确实是向导,则每个屏幕最多应流入 2-3 个不同的屏幕 (IMO)。这可以很容易地存储到一个非常简单的结构中(数据库、静态配置文件)。

        【讨论】:

        • 但是您必须定义some where组成向导的步骤顺序。因为我们需要能够跟踪用户完成了向导中的哪些步骤,以便我们可以显示进度和其他内容。例如,甚至可以让他们回到上次中断的地方。
        【解决方案4】:

        State”模式可能有意义,如果您希望允许用户在向导中前后导航。

        工作流模式也可能有意义。也许使用 Windows Workflow 基础进行调查。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-27
          • 2011-09-29
          • 1970-01-01
          • 1970-01-01
          • 2021-05-13
          • 1970-01-01
          • 1970-01-01
          • 2019-11-01
          相关资源
          最近更新 更多