Как вы моделируете бизнес-процесс в 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 (правильный инструмент для работы и все такое).
Это просто мысль, надеюсь, это поможет.