dobriykot
@dobriykot

Как запрограммировать набор условий возникновения события?

Допустим, мне надо, чтобы при выполнении определенных условий возникало событие. Например, «если А > 2000 и Б = 1, то [возникло событие]» или еще как-нибудь.
Суть в том, что пользователь должен иметь возможность сам создать такое условие, динамически выбрав параметры (если, и, или, больше, меньше, сколько раз, в какое время и т.п.). Это также облегчение задачи программисту, которому не надо каждый раз хардкодить условия в алгоритме. Не смог найти описание подобного алгоритма в интернете, но помню, что это было в какой-то cms. Пока думаю о варианте формы, которая постит в табличку с нужными столбцами строки, из которых собирается это условие в дальнейшем. Но это не тру-выход, мне кажется.
  • Вопрос задан
  • 2398 просмотров
Пригласить эксперта
Ответы на вопрос 3
schursin
@schursin
>но помню, что это было в какой-то cms
Кажется это был Битрикс…
Ответ написан
Комментировать
OlegTar
@OlegTar
программист .NET, Javascript, Perl
Помогу в силу понимания мною вашего вопроса. Если неправильно понял, прошу извинить.
===
Пользователь создаёт нужное условие.
Условие кладётся в массив.

Также можно предусмотреть, что должно выполниться по этому условию.

Завести, например, объект «Условие»:
{
условие: 'текст условия',
список событий: [function1, function2];
}
И этот объект класть в массив условий.

(«список событий» тоже может задать пользователь)

Когда происходят какие-то действия, мы пробегаемся по массиву проверяем выполнются ли условия.
Если выполняются, то пробегаемся по функциям внутри объекта «Условие» и выполняем их.

Есть также такой шаблон проектирования Наблюдатель
Ответ написан
Комментировать
Когда-то (но это было давно и не правда) решил схожую подзадачу так: в GUI формировался запрос (дерево либо с листьями «параметр, операция, значение[, значение2[, значение3[ ...]]]]», либо поддеревья с «корнем» «И»/«ИЛИ», после нажатия кнопки «Сохранить» или «Выполнить» он сохранялся как дерево для последующего редактирования и дополнительно рекурсивно преобразовывался в SQL выражение (подзадача была сделать конструктор отчётов по довольно обширной БД анкет, спрятав от пользователей SQL да и вообще табличную природу БД). Если у вас выражения не в SQL в итоге преобразуются, а язык интепретируемый, то можно воспользоваться схожим принципом — получать в виде дерева от интерфейса, если нужно хранить для последующего редактирования/вывода, то сохранить дерево, а главное сгенерировать на вашем ЯП выражение, а потом выполнить его через функцию, во многих языках называемой eval().
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы