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

Легкий механизм правил в Javascript

Я ищу предложения для легкого механизма правил, реализованного в Javascript.

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

4b9b3361

Ответ 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. Его можно использовать в браузере или на сервере.

Ответ 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 в качестве своего синтаксиса, а также метод ввода-вывода и обеспечивает обратные вызовы в среде хоста для оптимизации производительности.