我正在查看 ruby gem 工作流程:https ://github.com/geekq/workflow
Web 上的示例和其他示例在模型本身中包含工作流代码。我认为这是违反 SOLID 的。此外,业务逻辑也将编码在模型类中(当模型经过多个状态时采取的操作),这违反了 MVC 契约。
例子:
class Message
workflow do
state :spam_check do
event :is_spam, transitions_to => :destroy
event :is_not_spam,:transitions_to => :finished
end
end
# business logic
def is_spam
self.user.spammer_score += 1
if self.user.spammer_score > 5
self.user.destroy
end
end
end
这是好的编程吗?如果不是,那么应该在 Rails 项目中的哪个位置对状态更改进行编码?
- 固体 https://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29
- 工作流程 https://github.com/geekq/workflow
- 关于工作流与 state_machine 的文章:http: //jmettraux.wordpress.com/2009/07/03/state-machine-workflow-engine/