Подтвердить что ты не робот

Думаю, мне нужен простой механизм правил.

Мне нужен совет относительно наилучшего подхода к решению этой проблемы.

Я исследовал DROOLS, Java Rule Engine и некоторые другие. Все они мощные и имеют хорошие вещи о них. Я не знаю, какой из них (если есть) будет лучшим выбором для меня.

У меня есть один бизнес-объект. (упрощен для демонстрации)

Person
     firstName:String
     lastName:String
     departMent:String
     hireDate:Date

Мне нужно написать редактор в веб-приложении, который позволит создавать сложные правила вокруг этих полей. Мне нужно поддерживать сложную вложенную логику AND/OR. Мне просто нужны базовые операторы, и правило должно просто оценивать true или false. Если правило оценивается как true или false, произойдет одно действие.

Например,

firstName СОДЕРЖИТ "значение" AND (lastName EQUALS "вход" OR department СОДЕРЖИТ "вход" )

Я подумал, может быть, я должен просто написать свой собственный парсер и оценить логику в своем собственном коде. Я не знаю, что делать, любые советы или ссылки на что-то для чтения были бы весьма признательны. Существует ли конкретная модель проектирования, которую я мог бы исследовать?

Как бы вы решили эту проблему? Оговорки о механизмах правил в том, что, возможно, они слишком сложны для простой проблемы?

4b9b3361

Ответ 1

Это не вопрос "да/нет", но я могу поделиться своим опытом и надеюсь, что это поможет. Я успешно использовал DROOLS в нескольких проектах. Помимо некоторых случаев (у другой команды были проблемы с DROOLS при большой нагрузке), DROOLS - довольно полезная библиотека.

Я построил приложение, которое:
1. прочитать ввод от источника
2. выбрали следующее действие на основе ввода из набора доступных операций

Как ничтожно, как кажется, нужно быть очень гибким:
1. Вход был переменным набором пар имя-значение, имена не предопределены.
2. значения, наличие/отсутствие определенных имен/значений (основанных на возникновении/отсутствии событий), инициировать различные действия.
3. Бизнес-правила могут меняться во время работы приложения.

Возможно, есть лучшие решения, но к лучшему или к худшему, я закончил использовать DROOLS. Я разработал BPEL, в котором решения принимаются компонентом DROOLS. Компонент DROOLS внутренне считывает правила принятия решений из электронной таблицы Microsoft Excel. Он восстанавливает правила, если есть изменения в файле. Теперь эксперты домена меняют эту таблицу, когда это необходимо, и мы не переживаем болезненные развертывания!

Если вам нужен сложный интерфейс, DROOLS Guvnor - это легко доступное веб-приложение (с богатым пользовательским интерфейсом), которое поможет экспертам в вашем домене/субъекте создавать правила и хранить их в базе данных.

Ответ 2

В документации Drools говорится о том, когда использовать механизм правил. http://downloads.jboss.com/drools/docs/5.1.1.34858.FINAL/drools-expert/html_single/index.html#d0e181

Из документов...

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

- Проблема слишком уж сложна для традиционный код.

Проблема может быть не сложной, но вы не можете видеть хрупкий способ построив для этого решение.

- Проблема не очевидна алгоритмическое решение.

Это сложная задача, нет очевидных традиционных решения, или в основном проблема не полностью понят.

- Часто меняется логика

Сама логика может быть простой но правила меняются довольно часто. В многие выпуски программного обеспечения для организаций мало и далеко друг от друга правила могут помочь обеспечить "маневренность", которые необходимы и ожидаются в разумно безопасным способом.

- Эксперты домена (или бизнес-аналитики) легко доступны, но нетехнический.

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

Когда не использовать...

Как правило, двигатели динамические (динамические в том смысле, что правила могут быть хранятся и управляются и обновляются как данных), их часто рассматривают как решение проблемы развертывания программного обеспечения. (Большинство ИТ-отделов, похоже, существуют с целью предотвращения программного обеспечения.) Если это причина, по которой вы хотите использовать правило двигателем, имейте в виду, что двигатели правил лучше работать, когда вы можете писать декларативные правила. Как альтернатива, вы можете рассмотреть проекты, основанные на данных (таблицы поиска) или script обработки двигатели, в которых выполняются сценарии в базе данных и могут быть обновляется "на лету".

Ответ 3

Я бы предложил ваш собственный парсер. В этом контексте почему вы не можете сериализовать объект и использовать AJAX для проверки его в конце? Затем он отделяет логику проверки от пользовательского интерфейса.

Ответ 4

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

Ответ 5

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

Ответ 6

Не будет ли полезен Jython?

Каждое выражение/комплексное правило может быть телом функции. Таким образом, пользователь предоставляет тело, и ваш код помещает функцию spec вокруг него, а затем выполняет его.

Вы также можете поместить любые объекты Java/переменные в контексте jython, которые будут использоваться в вашем теге script/function.

Затем у вас есть стандартный, расширяемый широко используемый язык под рукой. Но я думаю, что редактор Jython может быть проблемой.

Ответ 7

Вы пробовали JBehave?

JBehave - это основа для управления поведением (BDD). BDD - эволюция тестового развития (TDD) и приемо-тест и предназначен для того, чтобы сделать эту практику более доступной и интуитивно понятным для новичков и экспертов. Он меняет словарный запас от тестирования, основанного на поведении, и позиционирует себя как философия дизайна.