我正在查看紅寶石寶石工作流程:https://github.com/geekq/workflowMVC模型中的工作流程?
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
這是很好的編程?如果不是,那麼在鐵路項目中應該對狀態變化進行編碼?
- SOLID https://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29
- 工作流程 https://github.com/geekq/workflow
- 條工作流VS state_machine:http://jmettraux.wordpress.com/2009/07/03/state-machine-workflow-engine/
整理。你暗示着從一種狀態轉換到另一種狀態是一種無所作爲的方法調用。對於上面的事件:如果submit()方法實際上有效,該怎麼辦?說給審稿人發郵件需要完成工作?或接受/拒絕()需要一個額外的參數爲什麼被接受或拒絕?這些方法調用現在執行屬於控制器的工作。然而,在工作流方法調用中會非常方便。:) – Daniel
那麼,我不是紅寶石專家,但我認爲你所問的應該是可能的工作流模型/框架中的行動。您可以根據需要編寫任意操作並擴展用例 - 例如,通過將文章發送給審閱者或者爲了接受或拒絕事件/轉換而在數據庫中設置其他參數。 –