Плюсы и минусы движков Java-правил
5 ответов
Каковы плюсы и минусы в принятии движков Java-правил JESS и Drools?
Используйте механизм правил, если вам нужно отделить бизнес-правила от логики приложения. В статье " Нужен ли вам движок правил" есть хороший пример:
Например, типичная система магазина может включать код для расчета скидки:
if (product.quantity > 100 && product.quantity < 500) { product.discount = 2; } else if (product.quantity >= 500 && product.quantity < 2000) { product.discount = 5; } else if (product.quantity >= 2000) { product.discount = 10; }
Механизм правил заменяет вышесказанное кодом, который выглядит следующим образом:
ruleEngine.applyRules(product);
Вы сами решаете, стоит ли отдавать правило консоли администратора в руки нетехнических людей или нет:)
Более подробная информация в Должен ли я использовать механизм правил? Зачем использовать Rule Engine? Некоторые рекомендации для принятия решения об использовании механизма правил и в Google.
Есть ли другие игроки?
Другие игроки включают JRules, Corticon (JRules - самая известная IMO - что не означает лучшее).
как они сравниваются в других областях, таких как простота использования, производительность, уровень интеграции с вашим кодом?
Не могу сказать точно, у меня есть только небольшой (положительный) опыт работы с Drools. Но вы получите некоторую обратную связь от сообщений в блоге, таких как JBoss Drools vs ILog JRules - анекдотическая история (обязательно прочитайте ее) или Работа с Drools с точки зрения JRules. Я уверен, что вы можете найти больше из них в Google (но я бы попробовал Drools).
Сейчас мы оцениваем правила для использования с нашим сервером приложений. Мы столкнулись с OpenRules, который легко интегрируется с Java и, насколько показало наше тестирование, достаточно быстр. Основным преимуществом OpenRules над остальными является то, как правила модифицируются и обрабатываются. Все это происходит в таблицах Excel, что является самым простым способом для непрограммистов. Все вовлеченные, даже нетехнические люди, все прекрасно поняли:-)
У нас также есть интегрированные слюни, но правила намного сложнее понять, так как это более программный подход. Поэтому мы, скорее всего, будем придерживаться OpenRules.
У нас был похожий вопрос, мы наконец-то подобрали Drools, нужно использовать drools, если у вас есть следующее:
- Бизнес-логика, которая, по вашему мнению, загромождается множеством условий, из-за множества сценариев
- Вы будете иметь растущий спрос на увеличение сложности
- Изменения бизнес-логики будут частыми (1 - 2 раза в год также будут частыми)
- У вашего сервера достаточно памяти, так как это инструмент, требующий памяти, он обеспечивает производительность за счет затрат памяти
Есть более подробная информация по следующему URL
Просто добавьте, что многие люди ищут что-то более похожее на управление выполнением определенных условий для включения или отключения определенных функций в приложении.
Я устал от повторной реализации одного и того же шаблона снова и снова, поэтому я решил создать для него проект OSS под названием Roolie http://sourceforge.net/projects/roolie/
Я только что разработал его, и, поскольку с 2010 года, когда он был выпущен, об ошибках не сообщалось, я обновил его до версии 1.0 без каких-либо изменений, кроме тех, которые требуются для его размещения в Maven Central (что я и делаю).
По сути, JSR-94 является излишним для большинства вещей, и есть огромная кривая обучения и накладные расходы, которые согласуются с текущими предложениями. Хорошо, если ты этого хочешь. Но если вы просто хотите объединить простые правила, написанные на Java, вместе с XML для поддержки ваших тестов состояния, Roolie - очень быстрый способ сделать это. Нет зависимости и нет кривой обучения.
Когда нам понадобился механизм правил, мы решили создать свой собственный, потому что доступные были слишком сложными для наших простых задач. Если вы даже имеете опыт разбора выражений, которые могут вставить пользователи, это не очень сложно сделать. В нашем случае большая часть спецификации обрабатывается XSD, и только несколько полей анализируются далее.