我该如何编写类似流程图的代码?或者我应该使用像Windows Workflow Foundation这样的东西?

时间:2011-01-19 17:39:21

标签: .net workflow flow

我正在研究如何最好地开发/编写类似流程图的流程图。

例如,如下图所示,我可以在其下面编写伪代码以满足要求。但是,随着流程图的变化,这将变得难以维护。此外,还有相当多的重复,当流程图变得更加复杂时,这种重复也会变得更糟。

我正在尝试解决Windows Workflow基础的问题吗?或者这对于手头的任务来说太过苛刻了?

也许有一个明显的解决方案我忽略了? 谢谢你的帮助!

(P.S。我应该提一下,我正在寻找基于.NET的解决方案)

alt text

..和伪代码......

Public Function Inbox() as Result

    If IsItImportant() Then
        If IsItUrgent() Then
            If IsItBestUseOfMyTime() Then
                If WillItTakeMoreThan15Mins() Then
                    Return Result.ProjectList
                Else
                    If CanDoItNow() Then
                        Return Result.Now
                    Else
                        If DoesItHaveDeadline() Then
                            Return Result.Calendar
                        Else
                            Return Result.NextAction
                        End If
                    End If
                End If
            Else
                Return Result.Delegate
            End If
        Else
            If IsItActionable() Then
                If IsItBestUseOfMyTime() Then
                    If WillItTakeMoreThan15Mins() Then
                        Return Result.ProjectList
                    Else
                        If CanDoItNow() Then
                            Return Result.Now
                        Else
                            If DoesItHaveDeadline() Then
                                Return Result.Calendar
                            Else
                                Return Result.NextAction
                            End If
                        End If
                    End If
                Else
                    Return Result.Delegate
                End If
            Else
                If IsItReferenceMaterial() Then
                    Return Result.File
                Else
                    Return Result.Trash
                End If
            End If
        End If
    Else
        If IsItWant() Then
            Return Result.Someday
        Else
            Return Result.Trash
        End If
    End If

End Function

3 个答案:

答案 0 :(得分:2)

这看起来非常适合WF4。 WF4比你想象的轻得多。我有相对复杂的工作流程,包含以毫秒为单位执行的自定义活动。此外,它非常容易创建自定义活动,使创建工作流更容易。 WPF的设计界面使得创建自定义设计师变得轻而易举。

答案 1 :(得分:0)

Workflow Foundation适用于长时间运行的进程(数天,数周,数月),这些进程可能在一台计算机上“进入睡眠状态”并在另一台计算机上“唤醒”。一个例子是故障单系统,其中工作流程从报告问题的人的工作站开始,可以在服务器内部“唤醒”,决定哪个部门处理它,在该部门的系统中再次唤醒,并且可以进一步由经理,质量保证部门,计费部门等处理。

如果没有关于你的问题的更多细节,你所寻找的并不像WWF的设计那样,如果你尝试使用WWF,你可能最终会得到一个太复杂而无法维护的系统。

以可保持可维护的方式编写代码的问题是一个旧问题,而且这是大多数CS流行语试图解决的问题:自顶向下编程,面向对象编程,CASE,UML,依赖注入和不久。

在您的情况下,您可能只需要组合自上而下编程(从流程图开始,然后将其写为伪代码,然后将其转换为可运行代码)和重构。

换句话说,以第一种方式编写它,然后重新访问代码以寻找改进它的机会,将重复的代码合并到抽象和库中,删除孤立的代码等。定期重构可以保持代码库一个易于维护的表单,不需要像WWF那样的大抽象以及它们带来的所有复杂性。

答案 2 :(得分:0)

我不确定WF是否适合这项工作。我在您对问题的描述中没有看到的是需要在模块和系统之间进行集成。这就是使用WF的最佳位置,尝试利用不同的外部系统以有组织和可监控的方式攻击单个流程(“工作流程/流程图”),从而可以查看流程的当前状态能够“保持活力”,以非阻塞的方式等待外部系统的响应。我只是不确定所描述的内容是否值得WF带来的开销。