Как реализовать настраиваемые правила для планирования расписания? - PullRequest
1 голос
/ 12 февраля 2020

Я работаю над реализацией библиотеки, которая преследует одну единственную цель: создание гибкого расписания для повторяющихся событий.

Например, один пользователь хочет запланировать отправку Уведомления "на вторник в 19:00. каждую четную неделю октября в високосный год ". Другой хочет, чтобы его отправляли «в 13-й день каждого нечетного месяца в 6 часов утра» или «в 7 часов утра каждый понедельник, вторник и среду».

Мой вопрос очень общий или абстрактный, и, вероятно, относится к некоторой области дискретной математики / информатики. Можем ли мы express расписаний из приведенного выше примера, используя простые арифметические c над целочисленными временными метками? Каких операций достаточно для создания гибкого языка, достаточно мощного для express почти любых повторяющихся событий?

1 Ответ

1 голос
/ 12 февраля 2020

Я считаю, что вам нужно будет поддерживать вычисление простых логических выражений - тех, которые используют предопределенный список предикатов (например, isLeapYear, isMonday, isEvenWeek, et c.), Комбинируя их с логические операторы И, ИЛИ, НЕ (и позволяют скобкам изменять приоритет). Если у вас есть фрагмент кода, способный вычислять логические выражения, остальное - просто определить подходящее количество предикатов.

Предикаты могут иметь аргумент (ы) - например, isDayOfMonth(x) или isHour(14) .

В базе данных вы, скорее всего, будете хранить AST (абстрактное синтаксическое дерево) выражения - но также возможно сохранить выражение в виде строки, исключительно по вашему выбору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...