Я смотрю на рабочий процесс ruby gem: https://github.com/geekq/workflow
В примерах и других примерах в Интернете код рабочего процесса содержится в самой модели. Я считаю, что это нарушение 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 должны быть закодированы изменения состояния?
- SOLID https://en.wikipedia.org/wiki/Solid_%28объектно-ориентированный_дизайн% 29а>
- Рабочий процесс https://github.com/geekq/workflow
- Статья о рабочем процессе и state_machine: http://jmettraux.wordpress.com/2009/07/03/state-machine-workflow-engine/