2015-01-04 6 views
3

Моя проблема заключается в том, что у меня есть приложение, которое дает пользователю возможность определять рабочий процесс (состояния, переходы, события и т. Д.), И мое приложение знает, как он реагирует (переходы) на основе на рабочем процессе пользователей.Нужно прояснить использование машины в режиме Ruby

Я посмотрел на нескольких государственных машин драгоценных камней, таких как AASM, и я вижу, как я мог бы использовать камень, чтобы заранее определить состояние машины но если состояние машины нужно изменить, это выглядит, как я бы для изменения кода и повторного развертывания. Я спорил с моим коллегой о том, как мы могли/не могли использовать драгоценный камень в государственном компьютере, чтобы делать то, что хотим, но для меня все они, как представляется, определяют статический конечный автомат, а изменения этого состояния требуют изменения кода.

Его предложение динамически изменяет класс Ruby для соответствия изменениям рабочего процесса пользователей. Моя мысль состоит в том, что состояния, переходы, события, охранники и т. Д. Являются постоянными объектами, которые пользователь модифицирует через наш API. Ни одна из наших нынешних мыслей, похоже, не работает с current Ruby state machines без каких-либо существенных изменений поверх этих драгоценных камней.

Место, в котором я рассматриваю как примерное решение, - это JIRA и то, как вы можете динамически определять состояния, переходы и другие атрибуты рабочего процесса для проекта.

+0

Я кратко посмотрел на драгоценный камень AASM, и похоже, что правила состояния машины хранятся в классах. Разве вы не могли бы просто создавать новый класс каждый раз, когда изменяются правила конечного автомата? – Adrian

+0

Динамично, то есть. (Извините за дополнительный комментарий, этот сайт не позволит мне редактировать комментарии по какой-то причине) – Adrian

+0

Это, кажется, один из аргументов. Мы создаем конфигурационный файл или объект, который определяет конечный автомат и который преобразуется в динамический класс Ruby, который может быть интерпретирован AASM (или любым другим конечным автоматом). Другая половина аргумента состоит в том, чтобы моделировать классы состояний машины, чтобы они могли сохраняться и использовать эти объекты для управления конечным автоматом. Мы не знаем, как лучше всего это сделать, но все государственные машины, похоже, хотят, чтобы конечный автомат статически определялся и сохранял только текущее состояние объекта. – Jon

ответ

0

Состояние машины должно использоваться, когда бизнес-логика предварительно определена, иначе вы должны моделировать ее по-разному. Если вы хотите, чтобы пользователи создавали свой собственный рабочий процесс (например, состояния, переходы, события), тогда было бы целесообразно создавать отдельные модели для состояния, перехода и события и определять их отношения в коде.

Тогда вы можете иметь, скажем, несколько видов переходов и событий, которые имеют разные результаты. Если бы вы могли подробно описать, какой динамический рабочий процесс вам нужен, я мог бы рассказать вам больше, работая над подобным проектом прямо сейчас, хотя мы еще не вводили события и переходы в рабочий процесс.

0

Драгоценность State_machine позволяет:

https://github.com/pluginaweek/state_machine#static--dynamic-definitions

+0

Этот камень определенно близок к тому, что я ищу, но разработка на котором высохли давным-давно. Что-то еще, что с тех пор привлекло мое внимание, это камень, [rails_workflow] (https://github.com/madzhuga/rails_workflow). Я еще не использовал его, но, похоже, он был наиболее подходящим для моего использования. – Jon

 Смежные вопросы

  • Нет связанных вопросов^_^