Предложите постоянную стратегию для системы рабочего процесса

StackOverflow https://stackoverflow.com/questions/4801987

Вопрос

Я нахожусь в процессе создания инструмента конфигурации пользовательского интерфейса для моего Pet Project. Один аспект этого инструмента позволяет конечному пользователю определить его оркестровку. Затем мне нужно сохранить это определение оркестровки в базу данных. В управляемой системе будет исполняемая версия этого определения. Исполняемая версия создается динамически по требованию.

Идея состоит в том, чтобы отделить ОПРЕДЕЛЕНИЕ из Исполняемый файл Версия, чтобы у меня была возможность выбрать версию времени выполнения среди BPMN или JPDL или решения на основе POJO (Beanflow).

Ограничение: Я не могу использовать редакторы BPMN, которые поставляются с такими рамками, как JBPM, Activiti и т. Д., Поскольку я не буду использовать свой собственный пользовательский интерфейс, который специфичен для моего домена.

Мне нужны предложения о том, как сохранить определение.

  1. Стоит ли использовать таблицы RDBMS? Если так, есть ли схема DB, которую я могу заимствовать, которая находится близко к концепциям оркестровки?

  2. Должен ли я сериализовать свое определение на документ экземпляра BPMN/JPDL XML?

  3. Есть ли другие простые форматы, которые я могу использовать?

Это было полезно?

Решение

Под "оркестровкой" я предполагаю, что вы имеете в виду Конечный штат Машина. Анкет Где текущее состояние диктует, какие переходы можно следовать в других штатах. Представление состояний и переходов в качестве краев и вершин часто производит направленный ациклический график, однако бывают случаи, когда график будет ездить на велосипеде (например, проект -отправьте для одобрения -> В ожидании одобрения -отклонить -> проект).

На практике отделение определения от выполнения требует от постоянного формата, который может легко приспособить настройку. По мере развития вашей системы вы найдете ряд непредвиденных краев, решение которых не должно потребовать изменения схемы настойчивости, только кода. Это подразумевает XML или решение NOSQL - то, что схема, схема которой легко изменяется или не существует.

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

Некоторые из интересных функций, которые я знаю, обладает JPDL, - это способность помочь объединить раздвоенные процессы, временные задачи (включая те, которые периодически повторяются) и объекты для отправки уведомления. Этот последний пункт - уведомление - имеет некоторую дальнейшую экспозицию. Одна из вещей, которые я нашел в моей собственной системе, - это необходимость отправки настраиваемой электронной почты, содержимое которого основано на данных данных. Эти существующие двигатели делают это относительно простым, предоставляя способ, например, переменные плагина, который затем динамически оценивается во время выполнения перед передачей. Кроме того, они предоставляют мосты между двигателем и любым хранилищем пользователей с целью отправки уведомлений групп людей, сталкиваться с ними и обеспечивать соблюдение политики безопасности.

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

Другие советы

Я бы не стал использовать таблицы RDBMS или, если вы это сделаете, хранить определения в виде текстовых каплей. Попытка сделать записи для определения - плохая идея, потому что гораздо более негибко и трудно изменить ваше определение с течением времени. Многие люди будут использовать разные подходы, но я бы использовал JSON или YAML и избегал XML. Мотивация для этого состоит в том, чтобы сделать это максимально простым. Попытка использовать XML, особенно формализованный конкретный формат XML, заставит вас потратить гораздо больше времени на встречу с точной спецификацией, которая на самом деле ничего не делает, чтобы помочь тому, что вы пытаетесь достичь. С JSON и YAML очень легко работать с точки зрения кода. Ямл легче читабель от людей и его легче редактировать, и он не так сложно для пунктуации и сбегает, как JSON. JSON используется более широко и меньше YAML. У JSON также есть двоичный аналог BSON, если размер документа является проблемой.

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

Очень хороший вопрос! Вот мои два цента:

  1. RDBMS: Если вы это сделаете, вы сможете запросить экземпляры рабочего процесса, например, какие токены находятся в «Узел X»?
  2. Хранение XML Как Clob: простота - это правда этого решения, но вы не можете действительно запросить их, просто получите их по ID
  3. Nosql: Есть много разных решений для разных проблем. Mongodb является популярным решением, оно обеспечивает настойчивость, ориентированную на документ.

Как насчет простой сериализации составленного пользовательского интерфейса, например, Xstream а затем храните сериализованные биты в базу данных в качестве двоичного столбца. Затем, когда пользователь входит в систему, получите связанные данные, десериализуйте, инициализируйте при необходимости и отобразите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top