4

我正在使用Zend Framework构建一个 webapp ,我需要对逻辑进行建模或跟踪一些与跟踪目标进度有关的逻辑。

让我用一个示例目标来说明

用户需要完成以下所有三项:
A) 活动一
B) 活动二
C) 活动三
用户需要完成以下一项
D) 活动四
E) 活动五
F) 活动六

在完成第一组的所有三个和第二组的一个之后,USER就完成了该目标。我将如何在 PHP 中对此进行建模,以便 webapp 知道目标已经完成以及如何将数据存储在数据库中?

需要明确的是,会有许多不同类型的目标,但它们在本质上都非常相似。

4

1 回答 1

3

假设A、B 和 CD、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
}

或者用英语...

然后,您可以将所有活动存储在活动表中,并将它们所属的组定义为对组表的简单 id 引用。当一个活动完成时,它可以在数据库中被标记。

要检查已完成的目标,您只需查找目标所需的每个组。每个组可以是“全部”或“任何”(或其他类似选项,如“min-2”),这将告诉脚本要检查活动完成的内容。然后每个组可以根据其活动返回 TRUE 或 FALSE。假设所有组都是必需的,那么目标很容易被识别为完成与否。

数据库可能如下所示:

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]

每当更新或忽略活动时,需要主动更新组和目标中的已完成值,并且它们的值总是动态计算出来的。

这是否有意义并满足您的要求?

于 2010-08-04T03:25:30.893 回答