我正在实现一个向导风格的用户界面。当用户浏览向导时,单击下一步,根据他们在每个屏幕上选择的选项,用户将不得不通过一组特定的向导屏幕。
这是在 ASP.NET MVC 中构建的。我想知道哪种设计模式最适合实现向导中步骤序列的逻辑。同样,根据他们所做的选择,他们有多个通过向导的路径。
我可以使用链表吗?“命令设计模式”?你有什么建议吗?
换句话说:您在哪里/如何根据用户在向导的特定步骤中选择的内容来抽象/封装确定向导中下一步是什么的逻辑?
我正在实现一个向导风格的用户界面。当用户浏览向导时,单击下一步,根据他们在每个屏幕上选择的选项,用户将不得不通过一组特定的向导屏幕。
这是在 ASP.NET MVC 中构建的。我想知道哪种设计模式最适合实现向导中步骤序列的逻辑。同样,根据他们所做的选择,他们有多个通过向导的路径。
我可以使用链表吗?“命令设计模式”?你有什么建议吗?
换句话说:您在哪里/如何根据用户在向导的特定步骤中选择的内容来抽象/封装确定向导中下一步是什么的逻辑?
如果您希望允许用户在向导中前后导航,“ State ”模式可能有意义。
工作流模式也可能有意义。也许使用 Windows Workflow 基础进行调查。
换句话说:您在哪里/如何根据用户在向导的特定步骤中选择的内容来抽象/封装确定向导中下一步是什么的逻辑?
一种方法是对 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 将是具有撤消/重做功能的命令模式的一个实例。
我喜欢保持简单。我使用步骤编号在我正在构建的对象上设置一个值,因此如果我正在构建保险单,我将在保单上拥有一个属性,指示它所处的步骤。然后我有一个方法,即路由器,查看策略并确定下一步将其发送到哪里,您可以在路由器中构建额外的逻辑以跳过步骤,或者您可以将逻辑放在每个步骤方法中并重定向回路由器方法。
我不得不同意博。
实际上,如果您需要一套复杂的导航逻辑规则,那么您有一个 GUI 方面的向导,而不是引擎盖下的向导。
如果尝试构建的确实是一个向导,那么每个屏幕最多应该流入 2-3 个不同的屏幕(IMO)。这可以很容易地存储到一个非常简单的结构中(数据库、静态配置文件)。