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-directional_design%29
- ワークフロー https://github.com/geekq/workflow
- ワークフローと state_machine に関する記事: http://jmettraux.wordpress.com/2009/07/03/state-machine-workflow-engine/