工作流基础设计问题/考虑因素?

时间:2011-08-21 15:29:33

标签: architecture c#-4.0 workflow-foundation

我正在审核这项技术,但有一些设计问题让我暂停了几次。有人可以帮助我理顺吗?

1)在工作流程内,所有变量都是全局变量或活动范围。如果要将它们绑定到活动的输入/输出参数,那么它们将需要全局范围。我们都处理过管理持久的全球范围变量。

我的另一个担心是,这种全球范围的变量有很大的诱惑,这些活动可以重新安排而没有什么后果,实际上它们不可能。

此外,每个活动必须知道谁在设置/修改他们的输入值,这实际上是全局范围变量的别名,违反了“Tell do not ask principle”。

2)单元测试,我可以看到每个活动如何进行测试,但我还没有看到整个工作流程如何进行测试。例如。如果在30天后没有收到用户的输入,我应该如何模拟发送电子邮件的工作流程?但是,我不太愿意完全放弃单元测试,因为工作流程毕竟是一个分支逻辑,因此很复杂,因此错误的可能性太大了,不容忽视。

3)整个工作流程基础看起来非常紧密,即。它是持久性+工作流+表达式树构建器(有点)。我希望它在某种程度上更优雅(比如反应式框架Rx),但我得谦卑地承认,我不知道为长时间运行的流程做更好/更快的做事方式。

总而言之,有限状态机通常很复杂。特别是对于特征蠕变(是的,认真考虑协变和逆变等),尤其是长时间运行的过程。我很喜欢将FSM用于很少改变的东西,例如。 C#编译器,但是对于那些应该像你的平均业务需求那样流畅而不是僵化的东西,我担心滥用它会有很大的诱惑,从而使代码无法维护。但是,业务流程中的工作流程非常重要,很难放弃技术。

我是否过于防守?你有什么看法?我怎样才能避免陷阱?

提前致谢!

1 个答案:

答案 0 :(得分:2)

看来你正在看WF 3.5,而不是WF 4。

  

1)在工作流程内,所有变量都是全局变量或活动变量   作用域。

WF 4介绍了创建范围的容器活动。

  

2)单元测试。

请参阅Windows Workflow Foundation on CodePlex,尤其是Microsoft.Activities.UnitTesting。书Pro WF: Windows Workflow in .NET 4.0有单元测试活动的例子。请记住,工作流程和活动是可以互换的。有关在单元测试中同步执行工作流程(或活动)的一种方法,请参阅WorkflowInvoker.Invoke

  

3)整个工作流程基础看起来如此紧密耦合

WF 4分离持久性,一个。

是的,工作流程可能被滥用;见The Danger of Centralized Workflows。我相信他们在涉及人类演员的长期运作过程中占有一席之地。