过去,我曾以程序员的身份工作于某些工作流引擎,但从未明确说明为什么我们首先选择工作流引擎。作为程序员,我知道编写代码时至少有100种方法可以执行任何操作,但是只有少数几种是最好的!
我仍然不了解工作流引擎(或更确切地说是它们的概念)能最好地解决哪些用例,而不是设计一个支持DI的应用程序。我正在寻找与领域无关的用例的任何一般特征,其中工作流引擎是最好的选择之一。
所以我的问题是:需求的一般特征是什么,可以作为选择一个好的工作流引擎并对其进行编码的信号?
过去,我曾以程序员的身份工作于某些工作流引擎,但从未明确说明为什么我们首先选择工作流引擎。作为程序员,我知道编写代码时至少有100种方法可以执行任何操作,但是只有少数几种是最好的!
我仍然不了解工作流引擎(或更确切地说是它们的概念)能最好地解决哪些用例,而不是设计一个支持DI的应用程序。我正在寻找与领域无关的用例的任何一般特征,其中工作流引擎是最好的选择之一。
所以我的问题是:需求的一般特征是什么,可以作为选择一个好的工作流引擎并对其进行编码的信号?
Answers:
当您需要从头到尾完成工作,但是有许多不同的路径/逻辑/规则可以到达时,工作流引擎将非常有用。
例如,假设我编写了一个发布内容的程序。因此,以我为例,发布过程要经过审核,合法和最终批准。我编写了实现过程逻辑和步骤的程序。现在,这项工作对我和我的公司都非常有用。因此,我决定其他人应该使用我的程序。
不幸的是,并不是每个人都使用相同的过程发布内容,因此,我们不会为每个不同的案例编写单独的过程,而是实施工作流程过程,以便该程序可以灵活地适应每个人。无论这两点之间有多少步骤,规则或逻辑,结果都是相同的。
因此,如果您的流程从始至终都是可变的,请使用工作流程。如果每个人都可以使用相同的过程,那么您就不需要工作流程。
我知道您要求用例,但是列出优点比想象所有可能的用例容易。优势当然取决于您要比较的引擎和语言,但总的来说:
将规则保留为数据而不是代码意味着您不必重新编译,因此您可以快速测试更改,在运行时进行更改等。但是,如果不必首先进行重新编译,则没有太多优势。
可以更合理地期望用户编辑规则。他们可能会以一种交互的方式修改它们,而这需要程序员为他们编写代码时不可行。
将规则保留为数据可允许编写工具以可视化和更改数据。
将规则保留为数据可以使元编程更加容易-您可以编写代码来分析数据并以某种复杂的方式进行插入,这对于代码来说是非常困难的。
所有这些事情都可以直接与代码一起完成(例如,编写C#解析器以查找特定类型的所有规则并生成更多规则的代码,以允许卸载程序集的方式将其动态插入到程序集中,编写用于用户也可以使用您的可视化器和编辑器执行此操作),但根据您的语言,可能会困难得多(使用Lisp的程序员可能将第1-4项称为“编程”)。
这似乎是一个古老的问题,但在野外却屡屡出现。我同意乔恩的回答。我发现工作流引擎在以下情况下效率很高:
要非常小心和关键,以查看您的问题域/需求是否具有业务流程,请勿尝试将其“适合”到工作流程中。