это случай использования конечного автомата? если да, то какой открытый код вы предлагаете? - PullRequest
0 голосов
/ 10 декабря 2010

Мое приложение должно получать данные из НЕСКОЛЬКИХ источников. Следующее должно быть определено пользователем

  1. Порядок источников данных
  2. В рамках Заказа условия (если вообще) определяют, использовать ли источник данных или пропустить его

Как только пользователь определил вышеупомянутые два, приложение назначит имя для его "оркестровки", которое он впоследствии будет использовать для извлечения данных.

Я хочу получить руководство по

  1. лучше ли мне писать свой собственный код для обработки заказа и условий ИЛИ это случай использования конечного автомата
  2. Если это вариант использования конечного автомата, то это лучший проект с открытым исходным кодом, обеспечивающий такую ​​поддержку
  3. Есть ли спецификации для конечных автоматов? SCXML
  4. Каковы лучшие реализации конечного автомата с открытым исходным кодом? Критерии (в следующем порядке): основаны на стандарте, легко отлаживаются, легко встраиваются, активно разрабатываются, поддерживают создание конечного автомата

Вариант использования: Это мультитенантное приложение. Каждый клиент собирается спроектировать свою собственную организацию и сохранить ее в БД. Это мы называем посадкой клиента. После того, как клиент забронирован, все его запросы будут использовать orcestration, который он сохранил ранее.

Теперь допустим, что есть 3 источника данных A, B и C. Мало кто из возможных оркестровок

  • Orchestrion 1: Потяните A, Потяните B и затем потяните C в этом порядке
  • Orchestrion 2: Потяните A, если A вернул ошибку, затем потяните B, потяните B (так в основном (A или C) и B)
  • Crchestrion 3: Потяните A, B и C. Порядок НЕ имеет значения. все нужно тянуть (может быть параллельно)

1 Ответ

1 голос
/ 10 декабря 2010

Практические правила использования конечного автомата:

  • Вы можете изобразить это как начальную диаграмму
  • процесс, скорее всего, является изменением, но алгоритмы, выполняемые в данной точке (то есть в состоянии), не являются - все еще в порядке, если на состояние алгоритма влияет состояние
  • вы хотите расширить возможности тех, кто не является программистом, изменять процесс

Для вашей цели я бы посмотрел на JBoss Business Process Management . У вас есть возможность определять и управлять конечным автоматом, используя представление XML, включая редактор GUI, позволяющий другим изменять его, а затем передавать его на «виртуальную машину» для выполнения. Язык определения предоставляет множество различных хуков для выполнения пользовательского кода и моделирования более сложных вариантов поведения, таких как параллельные процессы, итерационные действия и запланированные события.

Обновление в ответ на комментарий № 1

  1. Говоря более абстрактно, если вы можете нарисовать его в виде рамок и линий (UML будет соответствовать требованиям), то я думаю, что это будет соответствовать.
  2. Учитывая описанный вами вариант использования, я бы смоделировал каждый источник данных как состояние - вы можете разбить это взаимно-однозначное отображение для удобства (то есть выполнить более одного источника данных на состояние). Переходы между государствами определяют порядок. Ограничить переходы на основе условий.
  3. То, что другой пользователь управляет этим, по моему мнению, является наиболее веской причиной для решения конечного автомата. SCXML или jPDL (определение XML запускает jPBM) по сути являются сериализацией переходов состояний в виде XML. Этим XML можно манипулировать в графическом интерфейсе - оба проекта имеют графический интерфейс на основе Eclipse. Это позволяет данным (то есть источникам данных) перемещаться с процессом (состояние, переходы и условия), характерным для каждого пользователя.
  4. Механизм исполнения jPBM является встраиваемым, поэтому я не думаю, что он так тяжел, как вы подозреваете. Язык jBPM - jPDL - имеет хорошую поддержку инструментов. Я рассмотрел SCXML, и он, похоже, выполняет примерно те же функции, что и jPDL, но документация и сроки исполнения ниже. Кроме того, jPBM позволяет определить, какой класс выполнять в качестве ссылки на путь к классу, в то время как SCXML использует косвенное использование пространств имен XML.

Я бы изучил и сравнил спецификации SCXML и jPDL. У меня сложилось впечатление, что SXCML является надмножеством jPDL, например, jPDL имеет возможность повторять задачи как часть своего определения, тогда как SCXML так не выглядит.

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