Механизм правил в JavaScript

Есть ли в JavaScript механизм правил?

Вопрос именно в этом контексте:

  • Рассмотрим веб-приложение с формой, которую заполняют пользователи.
  • Когда пользователь заполняет каждое поле и переходит к следующему, бизнес-логика, написанная на JavaScript, управляет видимостью (и другими атрибутами) элементов формы дальше по странице.
  • Та же бизнес-логика также применяется на стороне сервера после отправки формы, хотя и на Java, для защиты от любых сбоев/манипуляций на стороне браузера.

  • Итак, было бы неплохо, если бы у нас был механизм правил, подобный JSR 94/Drools/JRules, который выполнял бы правила как в Java, так и в JavaScript? С таким механизмом правил я могу избежать жесткого кодирования своих правил, и я также сохраняю гибкость проверки на стороне клиента, а также на стороне сервера.

(PS: я попробовал маршрут AJAX и увидел, что приложение становится намного менее отзывчивым, что затрудняет продажу пользователям, которые привыкли к написанной вручную версии с чистым javascript.)


person Pradyumna    schedule 05.10.2011    source источник
comment
Я ничего не могу с собой поделать, если продолжаю блокировать мозги, думая, что правила О'Дойла из фильма Билли Мэдисона 1995 года...   -  person Mark Schultheiss    schedule 05.10.2011
comment
Всегда есть возможность серверного JavaScript. Я считаю, что есть движки JavaScript, которые работают в Java, а также есть Node.JS или аналогичные.   -  person 700 Software    schedule 09.07.2014


Ответы (3)


JSR-94 — это спецификация Java, поэтому я не понимаю, какое отношение она имеет к браузеру.

Есть правила Google JSON:

http://code.google.com/p/jsonrules/

Вы сказали, что пробовали маршрут AJAX. Означает ли это, что на сервере работает механизм правил и асинхронный вызов для доступа к нему?

person duffymo    schedule 05.10.2011
comment
Да.. Мне было интересно, есть ли у кого-то продукт, который также реализовал JSR-94 в JavaScript.. и под маршрутом AJAX я имел в виду механизм правил, работающий на сервере, и JavaScript, вызывающий запросы XHR (например, через DWR библиотека), чтобы поговорить с ним - person Pradyumna; 05.10.2011
comment
Проект сейчас закрыт, все еще находился в бета-версии. - person Ted Johnson; 12.12.2012
comment
Ты был связан с этим, Тед? Жаль это слышать. Интересно, много ли его использовали? - person duffymo; 12.12.2012

Это правильный вопрос. Из этой статьи, JSR 94.

не стандартизирует следующее: сам механизм правил; поток выполнения правил; язык, используемый для описания правил; механизм развертывания технологии Java EE.

Таким образом, можно использовать DSL, который может выполняться на клиенте и сервере, и его можно разрабатывать, выполнять и управлять в соответствии с архитектурой JSR 94. Или не.

Другая статья Создание простого механизма правил с использованием Java scripting API использует JSR-233 и другие материалы для создания системы механизма правил. Однако это предшествует JSR 94.

Я попал на эту страницу stackoverflow, так как тоже искал решение. В настоящее время у меня есть страница для проверки на стороне клиента, где группы полей могут запускать разные правила проверки, а требования меняются. Написание этого в императивном коде просто создает беспорядок с высокой цикломатической сложностью.

Однако проще всего использовать одну из множества библиотек проверки формы JavaScript. Все еще смотрит.

person Josef.B    schedule 02.07.2014

Поскольку javascript живет в браузере, пользователю довольно легко проверить ваш исходный код и обойти любые механизмы проверки js. Вот почему это обычно делается на стороне сервера.

Это больно, но я обычно реализую проверку как в javascript, так и на сервере, таким образом, «обычные» пользователи получат быстрый ответ, а «хакеры» не попадут в систему. К сожалению, я думаю, что вам нужно идти по этому пути, если вы хотите получить как хороший пользовательский опыт, так и хорошую безопасность.

Чтобы ответить на ваш вопрос, насколько мне известно, нет общей библиотеки, которую можно было бы использовать как на стороне клиента, так и на стороне сервера.

PS. помните, что JavaScript — это не Java! :-) http://en.wikipedia.org/wiki/JavaScript#JavaScript_and_Java

person Sebastian    schedule 05.10.2011