3

由于 ColdFusion 中目前还没有完整的 BPM 框架/解决方案,您如何将工作流建模为易于扩展和维护的 ColdFusion 应用程序?

业务工作流不仅仅是一个很好地映射到编程语言的流程图。例如:

您如何为任务 X 建模,该任务 X 后面有多个并行发生的任务 Y0、Y1、Y2,其中 Y0 是人工过程(需要等待输入),Y1 是可能出错并可能需要自动重试的 Web 服务, Y2 是一个自动化过程;紧随其后的任务 Z 只有在完成所有 Y 后才应执行?

我的想法...

  • 似乎我需要做大量的存储/管理/跟踪状态,并经常检查cfscheuler.
  • cfthread不会有太大帮助,因为某些任务可能需要几天时间(例如等待用户确认)。
  • 我已经可以想象流程将在​​多个 UDF、DB 和 CFC 中传播
  • 任何其他语言的开源工作流引擎,也许我们可以移植到 CF?

谢谢你的脑力。:)

4

2 回答 2

1

在我的脑海中,我正在考虑将状态持久化到数据库的状态设计模式。查看Head First Design Patterns的 Gumball Machine 示例。

通常,如果您有一些东西(如客户/订单/等)经历了许多状态变化,这将起作用。

根据您所处的状态,您的对象会发生不同的事情,这可能意味着坐在数据库表中等待用户手动更新标志。

在其他语言方面,我知道 Grails 有一个可用的工作流模块。我不知道您是否会更好地移植到 CF 或跳船到 Grails(适合这项工作的工具等等)。

这只是一个想法,希望它有所帮助。

于 2011-07-14T06:56:27.523 回答
1

研究JBoss 为其提供执行引擎Java 流程定义语言规范。使用这个基于 Java 的引擎可能是您最简单的解决方案,它可以解决您列出的许多问题。

如果您打算自己编写,您可能最终会在有向图中对状态和转换、顶点和边进行建模。正如 Ciaran Archer 所写,这是状态机的组件。最好的持久性方法 IMO 是通过序列化捕获通过工作流发送的任何数据的版本,捕获当前状态,以及状态之间的转换历史和对该数据的更改。该机制可能需要一种方法来跟踪谁或什么负责对该工作流采取下一步行动。

根据您的问题,要考虑的一件事是您是否真的需要在解决方案中表示并行任务。相反,可以将一组消息排入队列,然后为所有这些消息指定等待状态以完成。表示实际的并行性意味着您正在通过几个不同的进程同时移动数据。在这种情况下,当他们再次加入时,您需要一种算法来解决增量,这是一项非常重要的任务。

在 ColdFusion 的上下文中以及您要完成的任务中,如果您正在编写的系统需要轮询其他系统,则可能需要计划任务。将 WDDX 视为一种序列化格式。JSON,虽然很简单,但我记得有一些关于数字和日期的边缘案例可能会让你感到悲伤。

最后请参阅我对这个问题的回答以获得一些额外的想法

于 2011-07-14T12:29:22.663 回答