哪种C#设计模式适合在asp.net中编写自定义工作流程

时间:2009-02-27 10:02:13

标签: c# asp.net design-patterns workflow

试图在intertubes上找到一些例子。我正在考虑国家或战略模式,但如果有人有任何战争故事,他们可以指出我的例子或资源,将不胜感激。

我不/不能使用Windows工作流程。

我的例子是我有一个复杂的向导,它根据用户正在做什么以及用户是谁来改变流程的状态。

例如:

  • 取消
  • 用户要求
  • 经理要求
  • 确认
  • Refereed
  • 收到管理员
  • 管理员已确认
  • 管理员已取消

干杯 约翰

3 个答案:

答案 0 :(得分:6)

State模式(wikipedia link)怎么样?

public abstract class State
{
    /// <summary>
    /// Holds the current state we're in.
    /// </summary>
    public State CurrentState
    { 
        get; 
        set; 
    }

    public virtual string Cancelled(State context)
    {
        return "";
    }

    public virtual string RequestedByUser(State context)
    {
        return "";
    }

    public virtual string RequestedByManager(State context)
    {
        return "";
    }
}

public class CancelledState : State
{
    public override string Cancelled(State context)
    {
        context.CurrentState = new SittingState();
        return "Cancelled.";
    }

    public override string RequestedByUser(State context)
    {
        context.CurrentState = new RequestedByUserState();
        return "Requested by User.";
    }

    public override string RequestedByManager(State context)
    {
        return "You can't do this before it's been requested by the User";
    }
}

// (RequestedByUserState and RequestedByManagerState classes have been cut out)

如您所见,该模式确实非常适合。

如果存在安全问题,

Chain of Responsibility也可能具有相关性。如果维基百科的文章毫无意义,那么this book就有两个很好的例子。另一个是向导的命令模式。它们都不完美,但它们会给你一些好主意。

答案 1 :(得分:0)

设计模式不是特定于任何语言(C#设计模式?)。

我建议你应该专注于为你的工作流实现构建一个框架,使用不同的模式,而不是只考虑一个可能满足你所​​有需求的理想模式。

最近在Javaworld上阅读了一篇关于使用Dispatcher模式实现工作流的文章。

请参阅http://www.javaworld.com/javaworld/jw-10-2001/jw-1019-dispatcher.html

您也可以考虑在C#中评估备用的现有开源工作流框架,例如NetBPM http://www.netbpm.org/

答案 2 :(得分:0)

“责任链”或多或少类似于工作流程风格。这是一个很棒的模式,可以使用极大的灵活性选项。我强烈建议你试试。