.net 我应该如何编写类似代码的流程图?或者我应该使用Windows工作流基金会之类的东西?

.net 我应该如何编写类似代码的流程图?或者我应该使用Windows工作流基金会之类的东西?,.net,workflow,flow,.net,Workflow,Flow,我正在研究如何最好地开发/编写类似流程图的场景 例如,给定下图,我可以在下面编写伪代码来满足需求。然而,随着流程图的变化,这将变得难以维护。此外,还有相当数量的重复,同样,当流程图变得更复杂时,重复只会变得更糟 是我正试图解决Windows工作流基金会的问题吗?或者,对于手头的任务来说,这种方法是否过于严厉 也许我忽略了一个显而易见的解决方案? 谢谢你的帮助 (另外,我应该提到,我正在寻找基于.NET的解决方案) …和伪代码 Public Function Inbox() as Result

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

例如,给定下图,我可以在下面编写伪代码来满足需求。然而,随着流程图的变化,这将变得难以维护。此外,还有相当数量的重复,同样,当流程图变得更复杂时,重复只会变得更糟

是我正试图解决Windows工作流基金会的问题吗?或者,对于手头的任务来说,这种方法是否过于严厉

也许我忽略了一个显而易见的解决方案? 谢谢你的帮助

(另外,我应该提到,我正在寻找基于.NET的解决方案)

…和伪代码

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

这看起来确实非常适合WF4。WF4比您预期的轻得多。我有相对复杂的工作流,其中包含以毫秒为单位执行的自定义活动。此外,创建自定义活动非常容易,从而使创建工作流更容易。设计表面是WPF,使定制设计者变得轻而易举。

工作流基础是指长时间运行的进程(天、周、月),可以在一台计算机上“入睡”并在另一台计算机上“唤醒”。例如,故障通知单系统,其中工作流从报告问题的人员的工作站开始,可能在某个服务器内的某个位置“唤醒”,该服务器决定由哪个部门处理,在该部门的系统中再次唤醒,并可由经理、QA部门、计费部门等进一步处理

如果没有关于您的问题的更多细节,您所寻找的听起来不像WWF的设计目的,如果您尝试使用WWF,您可能最终会遇到一个过于复杂而无法维护的系统

以保持可维护的方式编写代码是一个古老的问题,这也是大多数CS流行语试图解决的问题:自顶向下编程、面向对象编程、CASE、UML、依赖注入等等

在您的情况下,您可能只需要将自顶向下的编程(从流程图开始,然后将其编写为伪代码,然后将其转换为可运行代码)与重构相结合


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

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

您是在寻找图形工具还是规则引擎?虽然我通常更喜欢在代码中工作而不是使用图形工具,但我对这两种可能性都同样开放。流程图应该是解决问题的辅助工具,不是软件开发的直接可执行工件。我同意我可以重构上述代码(例如重构重复代码)。然而,问题是,代码与原始流程图的“相似性”越来越低,并且在流程图被修改时更难更新。我想一个理想的解决方案可能是类似于DSL的,DSL可能是另一个解决方案,甚至可能是最好的。但是在你去那里之前,你确定有必要保持代码与流程图相似吗?在这条道路上也有一些可怕的故事,例如:是否有可能在设计图面和代码(不是xml-实际的.net代码)之间来回切换?@Darragh WF4工作流都是xaml。没有代码后面,除非你把活动代码当作代码后面。