Легкий механизм правил в Javascript
Я ищу предложения для легкого механизма правил, реализованного в Javascript.
Причиной такой реализации является создание очень легкого и быстрого моделирования на основе браузера с использованием небольшого набора правил (менее 20). Моделирование будет занимать полдюжины параметров и запускать правила и отображать результаты в браузере без необходимости возвращаться на сервер. Подумайте о пользовательском интерфейсе с несколькими переключателями, флажками, текстовыми полями и ползунками для управления параметрами. Моделирование будет быстро повторно запускаться на основе любого изменения параметров.
Ответы
Ответ 1
Я реализовал (более сложную) версию того, что вы описываете в С#, и продумав код, все это выполнимо с помощью JavaScript. Я согласен с опубликованными комментариями, что написать собственный вариант является жизнеспособным. Это может быть просто или сложно, как вы хотите.
Общие наблюдения для движка этого типа правил (в определенном порядке):
-
Нелинейные поиски - ваш друг. В JavaScript это было бы легко с помощью синтаксиса obj[key] = val
. Как только вы определяете вывод правила для заданного набора параметров, кешируйте его результаты, чтобы вы могли использовать его снова, не выполняя правило снова.
-
Определите, нужно ли вам обрабатывать уникальные комбинации входов. Например, допустим, вы разрешаете пользователю вводить несколько имен и запрашивать предложения по XYZ. В реальности теперь вам нужно запустить все правила против каждого входного значения. Это может быть неуместным, простым или чрезвычайно сложным (представьте себе систему бронирования отелей, которая принимает несколько дат, времени, местоположений и критериев и делает предложения).
-
setTimeout() может использоваться для сглаживания поведения пользовательского интерфейса, но описанные вами правила должны выполняться за несколько миллисекунд или меньше, поэтому беспокоиться о производительности в последнюю очередь. Производительность менее опасна, чем вы думаете с помощью механизма основных правил.
-
Определения правил легче всего манипулировать, если они являются объектами (или даже простыми деревьями объектов).
-
Не связывайте элементы пользовательского интерфейса для вывода результатов; смысл, привести результаты выполнения правила в список гибких объектов, чтобы вы могли создавать любой визуальный результат, который вы хотите от него.
-
Пользовательские выходные сообщения очень полезны для пользователя. Смысл, вместо того, чтобы запускать общее сообщение при выполнении условия, попробуйте вставить реальное значение в выходное сообщение, например: "Ваша кредитная оценка - всего 550. Вам нужно как минимум 600, чтобы продолжить".
Что это с моей головы. Удачи.
Ответ 2
Оформить nools механизм правил, реализованный в чистом JavaScript для node.js. Он имеет довольно простой синтаксис для определения правил.
Ответ 3
Rule Reactor (https://github.com/anywhichway/rule-reactor) - это легкий, быстрый, выразительный механизм бизнес-правил с привязкой вперед, использующий внутренние элементы JavaScript, ленивые кросс-продукты, а функции - объекты, а не Rete. Его можно использовать в браузере или на сервере.
Ответ 4
Это очень простой механизм правил, в котором используется javascript на стороне сервера (движок Mozilla Rhino) (возможно, это будет полезно для вас)
http://jubyrajan.blogspot.com/2010/04/implementing-simple-deterministic-rule.html
Ответ 5
Я создал пример html/javascript правил для конфигуратора продукта. Механизм правил основан на операциях if then. Операторы if then будут проверяться с помощью массива. Этот массив заполняется всеми возможными параметрами при каждом изменении параметров.
Посмотрите мой блог для примера.
Ссылка на мой блог "Механизм механизма javascript для прямого цепочки"
Я думаю, что "obj [key] = val" является ключом к движку правил javascript. JQuery помогает с обработкой javascript.
Ответ 6
Пожалуйста, проверьте (JSL) https://www.npmjs.com/package/lib-jsl.
Из обзорного документа JSL представляет собой библиотеку логического программирования на основе JSON, предназначенную для встроенного использования в программах JS. Он использует JSON в качестве своего синтаксиса, а также метод ввода-вывода и обеспечивает обратные вызовы в среде хоста для оптимизации производительности.