Как вы моделируете бизнес-процесс в ColdFusion? - PullRequest
3 голосов
/ 14 июля 2011

Поскольку в ColdFusion еще нет полной инфраструктуры / решения BPM, как бы вы смоделировали рабочий процесс в приложении ColdFusion, которое можно легко расширять и обслуживать?

Бизнес-процесс - это не просто блок-схема, котораякарты красиво в язык программирования.Например:

Как вы моделируете задачу X, которая следует за несколькими задачами Y0, Y1, Y2, которые выполняются параллельно, где Y0 - это человеческий процесс (нужно ждать ввода), а Y1 - веб-сервисэто может пойти не так и может потребоваться автоматическая повторная попытка, а Y2 - автоматизированный процесс;следует задание Z, которое должно быть выполнено только тогда, когда все Y завершены?

Мои мысли ...

  • Похоже, мне нужно сделать много хранения / управления/ отслеживание состояний и частая проверка с помощью cfscheuler.
  • cfthread не сильно поможет, поскольку некоторые задачи могут занимать дни (например, ждать подтверждения пользователя).
  • Я уже могу представить, что поток будет распространяться в нескольких UDF, DB и CFC
  • любой движок с открытым исходным кодом на другом языке, который, возможно, мы можем перенести на CF?

Спасибо за ваш умственный потенциал.:) * * 1021

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Изучите спецификацию языка определения процесса Java , где JBoss имеет механизм выполнения для него . Использование этого движка на основе Java может быть вашим самым простым решением, и оно решает многие из перечисленных вами проблем.

Если вы намереваетесь написать свое собственное, вы, вероятно, в конечном итоге будете моделировать состояния и переходы, вершины и ребра в ориентированном графе. И это, как писал Кьяран Арчер, является компонентом State Machine . Лучший подход к сохранению IMO - захват версий всех данных, отправляемых через рабочий процесс через сериализацию, захват текущего состояния и историю переходов между состояниями и изменениями этих данных. Механизм, вероятно, нуждается в способе отслеживать, кто или что несет ответственность за принятие следующего действия против этого рабочего процесса.

Исходя из вашего вопроса, нужно учитывать одну вещь: действительно ли вам нужно представлять параллельные задачи в своем решении. Где вместо этого можно было бы поставить в очередь набор сообщений, а затем указать состояние ожидания для всех из них для завершения. Представление фактического параллелизма подразумевает, что вы перемещаете data одновременно через несколько различных процессов. В этом случае, когда они присоединяются снова, вам нужен алгоритм для разрешения дельт, что является весьма нетривиальной задачей.

В контексте ColdFusion и того, что вы пытаетесь выполнить, может потребоваться запланированное задание, если система, которую вы пишете, должна опрашивать другие системы. Рассмотрим WDDX как формат сериализации. JSON, хотя и соблазнительно прост, насколько я помню, имеет несколько крайних случаев с числами и датами, которые могут вызвать у вас горе.

Наконец, см. Мой ответ на этот вопрос для некоторых дополнительных мыслей .

1 голос
/ 14 июля 2011

От всего головы я думаю о шаблоне разработки состояний с сохранением состояния в базе данных. Посмотрите пример Gumball Machine *1003* Head First Design Patterns.

Как правило, это будет работать, если у вас есть что-то (например, клиент / заказ / и т. Д.), Которое проходит через ряд изменений состояния.

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

Что касается других языков, которые я знаю, у Grails имеется модуль рабочего процесса . Я не знаю, будет ли вам лучше портировать на CF или прыгнуть с корабля в Grails (подходящий инструмент для работы и все такое).

Это просто мысль, надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...