我的问题是我有一个应用程序,它使用户能够定义工作流程(状态、转换、事件等),并让我的应用程序知道它如何根据用户工作流程做出反应(转换)。
我查看了几个状态机 gem,例如AASM,我看到了如何使用 gem 来预定义状态机,但是如果状态机需要更改,看起来我必须修改代码并重新-部署。我一直在与我的同事争论我们如何能够/不能利用状态机 gem 来做我们想做的事情,但对我来说,它们似乎都定义了一个静态状态机,并且对该状态机的更改需要更改代码。
他的建议是动态修改 Ruby 类以匹配用户工作流程的变化。我的想法是状态、转换、事件、守卫等是用户通过我们的 API 修改的可持久对象。我们目前的思路似乎都不适用于当前的 Ruby 状态机,除非在这些 gem 之上进行一些重大修改。
作为示例解决方案,我一直关注的地方是 JIRA,以及如何为项目动态定义状态、转换和其他工作流属性。