У меня есть класс (позволяет называть его checker) и различные классы, которые выполняют задачи (позволяют называть их задачами). каждая задача относится к нескольким категориям:разделение задач на категории
каждая задача запускается и в какой-то момент спрашивает чекер, если им разрешено что-то делать. контрольные ответы в соответствии с состоянием системы и в соответствии с их категорией. задача может быть в нескольких категориях
как бы вы это реализовали? (cpp, но я действительно не думаю, что его язык специфичен).
Я думал о добавлении списка категорий в каждой задаче и функции, которая получает категорию и ответы, если задача принадлежит ей.
class checker {
bool is_allowed(Task * task);
}
class Task
{
bool is_belongging_to_category(Category cat);
void some_task_to_do()
{
...
if (checker::is_allowed(this)) { ....}
else {....}
}
}
Есть ли лучший способ решить эту проблему? Возможно, некоторые известные образцы дизайна ...
Я подозреваю, что вам нужно будет предоставить более подробную информацию ... это 'is_allowed()' check, предназначенное для того, чтобы быть «мне разрешено делать эту специфическую вещь» (например, какая-то модель «разрешений»), потому что если поэтому, что вы показали, не имеет никаких указаний о том, что именно задает задача. В качестве альтернативы, это общий «мне разрешено выполнять какую-либо работу [любого вида]» (т. Е. Больше модели «балансировки нагрузки»)? Если последнее, вероятно, должно быть некоторое время/цикл сна или другой механизм планирования. – TripeHound
is_allowed - это разрешение mechanisem. Я не хотел усложнять ситуацию, но это часть гораздо более крупной системы, и задачи - это способ парализовать работу. например, задача может захотеть сохранить ее конфигурацию на диск, но это не разрешено, если система находится во время выключения (если эта задача не является частью выключения) – Epic