Как вы моделируете бизнес-процесс в ColdFusion?

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

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

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

Мои мысли...

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

Спасибо за вашу интеллектуальную мощь.:)

2 ответа

Решение

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

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

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

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

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

Вдобавок ко всему, я думаю о шаблоне разработки State с сохранением состояния в базе данных. Посмотрите пример машины Gumball Machine Head First Design Patterns.

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

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

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

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

Другие вопросы по тегам