【发布时间】:2015-01-04 19:18:36
【问题描述】:
我的问题是我的应用程序让用户能够定义工作流程(状态、转换、事件等),并让我的应用程序知道它如何根据用户工作流程做出反应(转换)。
我查看了几个状态机 gem,例如 AASM,我看到了如何使用 gem 来预定义状态机但是如果状态机需要更改,看起来我必须修改代码并重新部署。我一直在与我的同事争论我们如何能够/不能利用状态机 gem 来做我们想做的事情,但对我来说,它们似乎都定义了一个静态状态机,并且对该状态机的更改需要更改代码。
他的建议是动态修改 Ruby 类以匹配用户工作流程的变化。我的想法是状态、转换、事件、守卫等是用户通过我们的 API 修改的可持久对象。我们目前的思路似乎都不适用于current Ruby state machines,除非在这些宝石之上进行一些重大修改。
我一直关注的示例解决方案是 JIRA,以及如何为项目动态定义状态、转换和其他工作流属性。
【问题讨论】:
-
我简要查看了 AASM gem,看起来状态机规则存储在类中。每次状态机规则改变时你就不能创建一个新类吗?
-
动态地,即。 (对不起,额外的评论,这个网站不让我编辑 cmets 出于某种原因)
-
这似乎是争论之一。我们创建一个定义状态机的配置文件或对象,并将其转换为可由 AASM(或任何状态机)解释的动态 Ruby 类。论点的另一半是对状态机类进行建模,以便它们可以被持久化并让这些对象用于驱动状态机。我们真的不知道执行此操作的最佳方法,但所有状态机 gem 似乎都希望静态定义状态机并且只保留对象的当前状态。
标签: ruby-on-rails ruby acts-as-state-machine