Облегченный механизм правил в Javascript

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

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


person Philippe Monnet    schedule 07.08.2010    source источник
comment
@Philippe Филипп - Вы говорите о правилах проверки?   -  person TheCloudlessSky    schedule 07.08.2010
comment
Нет, скорее набор правил «если-то», чтобы сузить контекст с точки зрения критериев, что в конечном итоге приводит к способу поиска значений решения в матрице. Таким образом, это будет похоже на простой двигатель с прямой цепочкой.   -  person Philippe Monnet    schedule 07.08.2010
comment
У вас есть полноценный язык программирования, какой функции ему не хватает?   -  person aaaaaaaaaaaa    schedule 22.10.2010
comment
Похоже, было бы быстрее написать его, чем искать, изучать и адаптировать существующий механизм правил.   -  person Pēteris Caune    schedule 26.10.2010
comment
С тех пор, как я начал свое исследование этого, я нашел что-то несколько связанное, но не механизм правил как таковой. Brain (см. harthur.github.com/brain) — библиотека нейронной сети, реализованная на Javascript. Я построил прототип с ним, и это довольно хорошо. Тем не менее, я до сих пор не нашел структуру механизма правил.   -  person Philippe Monnet    schedule 28.10.2010
comment
Определить правило движка лучше, наверное.   -  person    schedule 26.12.2010
comment
Под механизмом правил я подразумеваю традиционное определение - Википедия /а>   -  person Philippe Monnet    schedule 27.12.2010
comment
Взгляните на flexrule.com/archives/javascript-rules-engine. это коммерческий продукт, который поддерживает прямую цепочку, обратную цепочку, и вы можете использовать таблицу Natural Language и Decision для выполнения и моделирования правил в вашем приложении JS. (Я работаю на FlexRule)   -  person Arash Aghlara    schedule 14.04.2018
comment
C# World: у вас очень мощный язык программирования. Создайте механизм правил, используя Linq и лямбда. =› Введите FluentValidation   -  person int-i    schedule 27.07.2018


Ответы (6)


Ознакомьтесь с механизмом правил nools, реализованным на чистом JavaScript для node.js. Он имеет довольно простой синтаксис для определения правил.

person dearwish    schedule 25.10.2012
comment
Как можно заставить это работать для IE 8-9? - person niceman; 14.11.2015
comment
nools больше не поддерживается C2FO, эксперт из репозитория github: C2FO is no longer maintaining this project. Please use accordingly. If you would like to help maintain or take over the project please let us know. - person Maulik Soneji; 06.03.2017

Я реализовал (более сложную) версию того, что вы описываете, на С#, и, вспоминая код, все это было бы выполнимо с помощью JavaScript. Я согласен с комментариями, опубликованными в том, что написание собственного является жизнеспособным вариантом. Он может быть настолько простым или сложным, насколько вы хотите.

Общие наблюдения для этого типа механизма правил (в произвольном порядке):

  1. Нелинейный поиск — ваш друг. В JavaScript это было бы легко сделать с помощью синтаксиса obj[key] = val. Как только вы определите выходные данные правила для заданного набора параметров, кэшируйте его результаты, чтобы вы могли использовать их снова, не выполняя правило снова.

  2. Определите, нужно ли вам обрабатывать уникальные комбинации входных данных. Например, предположим, что вы разрешаете пользователю вводить несколько имен и запрашивать предложения по XYZ. На самом деле теперь вам нужно запустить все правила для каждого входного значения. Это может быть неуместным, простым или чрезвычайно сложным (представьте себе систему бронирования отелей, которая принимает несколько дат, времени, мест и критериев и делает предложения).

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

  4. Определениями правил будет легче манипулировать, если они являются объектами (или даже простыми деревьями объектов).

  5. Не привязывайте элементы пользовательского интерфейса к результатам вывода; то есть поместите результаты выполнения правила в гибкий список объектов, чтобы вы могли создать из него любой визуальный вывод, который вы хотите.

  6. Настраиваемые выходные сообщения очень полезны для пользователя. Это означает, что вместо того, чтобы запускать общее сообщение при выполнении условия, попробуйте вставить реальное значение в выходное сообщение, например: «Ваш кредитный рейтинг всего 550. Вам нужно минимум 600, чтобы продолжить».

Это мне в голову не приходит. Удачи.

person Tim Medora    schedule 27.12.2010
comment
Это не совсем то, что я имел в виду, но поскольку вы затронули эту тему, я нашел отличный фреймворк для моделирования цепочек зависимостей: KnockoutJS knockoutjs .com. Фактически, в настоящее время я использую его в сочетании с Brain (harthur.github.com/brain ) библиотека нейронной сети для создания динамического моделирования. Но для исходной проблемы, которую я пытаюсь решить, я не могу использовать нейронную сеть, так как мне нужно смоделировать набор правил (пары условие/действие), которые я могу оценить либо на основе цели (доказать цель X, т.е. обратную цепочку) или на основе ряда фактов (т.е. прямая цепочка). - person Philippe Monnet; 27.12.2010
comment
@Phillipe, согласен, нейронная сеть не решает описанную вами проблему. Возможно, я плохо сформулировал свой ответ; Короче говоря, я не знаю существующего фреймворка, который бы делал то, что вы просили, но, исходя из моего опыта, вы могли бы легко выбить базовый, но гибкий механизм правил за несколько дней, даже на JS. Звоночки/свистки/предостережения – это то, где время теряется (именно поэтому я указал на вещи, которые я узнал, которые были ловушками). Я не знаю, если написать свой собственный вариант или нет. - person Tim Medora; 27.12.2010

Rule Reactor (https://github.com/anywhatway/rule-reactor) — это легкий , быстрый, выразительный механизм бизнес-правил с прямой цепочкой, использующий внутренние компоненты JavaScript, ленивые перекрестные продукты и функции как объекты, а не Rete. Его можно использовать в браузере или на сервере.

person AnyWhichWay    schedule 17.06.2016
comment
Теперь это также устарело npmjs.com/package/rule-reactor - person icc97; 19.10.2020

Это очень простой механизм правил, который использует javascript на стороне сервера (движок Mozilla Rhino) (возможно, он будет вам полезен) http://jubyrajan.blogspot.com/2010/04/implementing-simple-deterministic-rule.html

person John    schedule 29.12.2010

Я сделал пример механизма правил html/javascript для конфигуратора продукта. Механизм правил основан на операторах if then. Операторы if then будут проверяться с помощью массива. Этот массив заполняется всеми возможными параметрами каждый раз, когда параметры изменяются. Посмотрите мой блог для примера. Ссылка на мой блог "Переадресация цепочки javascript обработчик правил"

Я думаю, что «obj[key] = val» является ключом к механизму правил javascript. Jquery помогает с обработкой javascript.

person Alwin    schedule 17.02.2012