Думаю, мне нужен простой механизм правил.
Мне нужен совет относительно наилучшего подхода к решению этой проблемы.
Я исследовал 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 СОДЕРЖИТ "вход" )
Я подумал, может быть, я должен просто написать свой собственный парсер и оценить логику в своем собственном коде. Я не знаю, что делать, любые советы или ссылки на что-то для чтения были бы весьма признательны. Существует ли конкретная модель проектирования, которую я мог бы исследовать?
Как бы вы решили эту проблему? Оговорки о механизмах правил в том, что, возможно, они слишком сложны для простой проблемы?
Ответы
Ответ 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) и приемо-тест и предназначен для того, чтобы сделать эту практику более доступной и интуитивно понятным для новичков и экспертов. Он меняет словарный запас от тестирования, основанного на поведении, и позиционирует себя как философия дизайна.