我正在实现向导式用户界面。当用户流向向导时,单击下一步,根据他们在每个屏幕上选择的选项,用户必须经过一组特定的向导屏幕。
这是在ASP.NET MVC中构建的。我想知道什么样的设计模式最适合实现向导中的步骤序列的逻辑。同样,根据他们的选择,他们在向导中有多条路径。
我可以使用链表吗? “Command Design Pattern”?你推荐什么?
换句话说:在哪里/如何根据用户在向导的特定步骤中选择的内容,抽象/封装确定向导中下一步的逻辑?
答案 0 :(得分:3)
如果您希望允许用户在向导中向前和向后导航,则“State”模式可能有意义。
工作流模式也可能有意义。也许使用Windows Workflow基础进行调查。
答案 1 :(得分:1)
换句话说:在哪里/如何根据用户在向导的特定步骤中选择的内容,抽象/封装确定向导中下一步的逻辑?
一种方法是建模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
{
//...
}
向导的目的是构建产品(汽车,计算机,假期等)。
在这种情况下,它的向导决定下一步 - 可能基于向导正在构建的产品的状态。向导将在UI的控制下表现得像Builder,这将是导演并告诉向导何时以及在何种方向进行转换。由Wizard决定下一步实际是什么。可以支持多个分支点,但该实现将隐藏在向导内部。
步骤将是具有撤消/重做功能的Command Pattern的实例。
答案 2 :(得分:1)
我喜欢保持简单。我使用步骤编号在我正在构建的对象上设置一个值,所以如果我正在建立一个保险单,我会在策略上有一个属性,指示它所处的步骤。然后我有一个方法是路由器并查看策略并确定下一步发送它的位置,您可以在路由器中构建额外的逻辑以跳过步骤,或者您可以将逻辑放在每个步骤方法中并重定向回路由器方法
答案 3 :(得分:0)
我必须同意博。
实际上,如果你需要一套复杂的导航逻辑规则,那么你就有了一个GUI智能向导,但是没有一个向导。
如果尝试构建的内容实际上是一个向导,则每个屏幕最多应流入2-3个不同的屏幕(IMO)。这可以很容易地存储到一个非常简单的结构中(数据库,静态配置文件)。