【问题标题】:Design pattern required [closed]需要设计模式[关闭]
【发布时间】:2018-08-30 12:43:23
【问题描述】:

客户可以下一个订单。每个订单在交付之前都会经历不同的阶段。 假设有许多阶段 A、B、C、D、E。通过这些阶段将由单个客户端手动完成。 从 A-> B (or) E , B -> C , C -> D (or) E

每个阶段都需要用户提供不同的输入才能进入下一个阶段。所有这些输入都是系统中建模的不同实体。

在 UI 级别我有一个下拉菜单。如果当前状态为 A,则下拉菜单显示 B 和 E。如果 B 则为 C。 下拉列表的值来自主表的数据库。在选择不同的选项时,我使用 JQuery 向用户显示不同的表单。

我在 .cshtml 页面和服务器端的代码中都堆叠了多个 if。有没有更好的方法来做到这一点? 在这种情况下有什么设计模式可以帮助我?

如果我做错了什么,请提出建议。

【问题讨论】:

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


    【解决方案1】:

    此响应不是特定于 asp 的,适用于任何编程环境。

    您的系统具有明确定义的阶段以及这些阶段之间的过渡。这非常适合 状态模式。

    状态模式为每个状态提供了一个具体的上下文类(保存当前状态)一个抽象的状态类和一个具体的状态子类。在您的情况下,您有明显的状态 A、B、C、D、E,但您可能还需要一个用于初始化的 ENTRY 状态和一个用于清理的 EXIT 状态。

    例如,状态 A 将封装所有逻辑,以调用阶段 A 的正确菜单和表单,并处理用户输入。状态 A 还负责转换到状态 B。

    您的应用程序中的控制流程可以通过状态转换图来说明。在此处阅读它们http://www.cs.unc.edu/~stotts/145/CRC/state.html

    您可以在此处阅读有关带有 asp 实现的状态模式 https://www.dofactory.com/net/state-design-pattern

    状态模式的优点是您可以添加新状态而无需复杂的逻辑,并且您摆脱了控制程序流程所需的大 if/else 块。您仍然需要在每个状态下做出决定以决定下一个状态,但这是非常可控的。

    学习状态模式的最好方法是做一些例子,然后从简单的情况开始,直到你有信心重构你的应用程序。

    【讨论】:

      猜你喜欢
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      相关资源
      最近更新 更多