3

我的问题是我有一个应用程序,它使用户能够定义工作流程(状态、转换、事件等),并让我的应用程序知道它如何根据用户工作流程做出反应(转换)。

我查看了几个状态机 gem,例如AASM,我看到了如何使用 gem 来预定义状态机,但是如果状态机需要更改,看起来我必须修改代码并重新-部署。我一直在与我的同事争论我们如何能够/不能利用状态机 gem 来做我们想做的事情,但对我来说,它们似乎都定义了一个静态状态机,并且对该状态机的更改需要更改代码。

他的建议是动态修改 Ruby 类以匹配用户工作流程的变化。我的想法是状态、转换、事件、守卫等是用户通过我们的 API 修改的可持久对象。我们目前的思路似乎都不适用于当前的 Ruby 状态机,除非在这些 gem 之上进行一些重大修改。

作为示例解决方案,我一直关注的地方是 JIRA,以及如何为项目动态定义状态、转换和其他工作流属性。

4

2 回答 2

0

预定义业务逻辑时应使用状态机,否则应以不同的方式对其进行建模。如果您希望用户创建自己的工作流程(例如状态、转换、事件),那么为状态、转换和事件创建单独的模型并在代码中定义它们的关系是有意义的。

然后,您可以拥有多种转换和事件,它们具有不同的结果。如果你能详细描述你需要什么样的动态工作流,我可以告诉你更多——现在正在做类似的项目,尽管我们还没有在工作流中引入事件和转换

于 2015-01-10T06:33:39.673 回答
0

state_machine gem 允许这样做:

https://github.com/pluginaweek/state_machine#static--dynamic-definitions

于 2015-08-18T21:50:24.763 回答