Как моделировать и отслеживать требования к цели в PHP - PullRequest
4 голосов
/ 04 августа 2010

Я создаю веб-приложение, используя Zend Framework , и мне нужно смоделировать логику или отслеживать некоторую логику, связанную с отслеживанием прогресса в достижении цели.

Позвольте мне проиллюстрировать пример цели .

ПОЛЬЗОВАТЕЛЬ Необходимо выполнить Все Три из следующих действий:
A) Первое задание
B) Второе задание
C)Задание 3
ПОЛЬЗОВАТЕЛЬ Необходимо выполнить Один из следующих действий:
D) Задание 4
E) Задание 5
F) Задание 6

После завершения всех трех из первой группы и одного из второй группы USER завершил эту цель.Как бы я смоделировал это в PHP , чтобы веб-приложение знало, что цель достигнута, и как мне сохранить данные в базе данных?

Чтобы быть понятным будет много разных типов целей, подобных этой, но все они будут очень похожи по своей природе.

1 Ответ

3 голосов
/ 04 августа 2010

Предполагая, что A, B & C и D, E, & F всегда будут принадлежать определенной группе в рамках цели, я бы разработал ее следующим образом:

Goal::isComplete()
{
  foreach (Group)
  {
    switch (Group::type())
    {
      case "all":
        TRUE if all complete
        break

      case "any":
        TRUE if any complete
        break;
    }
  }

  if all TRUE
    return TRUE
}

Или по-английски ...

Затем вы можете сохранить все свои действия в таблице действий и определить группу, частью которой они являются, в качестве простой ссылки на таблицу групп.Когда действие завершено, оно может быть помечено таким образом в БД.

Чтобы проверить достигнутые цели, вам просто нужно найти каждую группу, которая требуется для достижения цели.Каждая группа будет либо «все», либо «любая» (или другие подобные параметры, например, «min-2»), и это сообщит сценарию, что нужно проверять при выполнении заданий Activity.Каждая группа может затем возвратить ИСТИНА или ЛОЖЬ в зависимости от ее действий.Если предположить, что требуются все группы, то цель будет легко идентифицирована как выполненная или нет.

База данных может выглядеть следующим образом:

Activities
- id
- group_id
- name
- completed
- [details about activitiy]

Groups
- id
- goal_id
- type  (ENUM: 'any', 'all')
- completed
- [details about group]

Goals
- id
- completed
- [details about goal]

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

Имеет ли это смысл и делает то, что вам требуется?

...