0

我在这里列出我的问题。

  1. 人们可以进出房间。
  2. 人可以是学生、老师或 HOD。
  3. 学生有一个称为状态的属性,可以手动更新也可以自动更新。

这些是我的事件:

  1. 进入房间的人。
  2. 为每个学生更新了属性状态。

这些是我的规则。

  1. 如果进入房间的人是教师,则打印教师进入。
  2. 如果进入房间的人数超过 30 人,请提醒我。
  3. 如果学生参加了超过 20 小时的课程,则更新状态以完成。

现在我想将 1 和 3 结合在一起。
like: 4. 如果有属性状态完整的学生进入房间,则提醒老师。

现在,正如我之前所说,这两个事件是分开发生的。因此,以 2 个不同的规则处理它更容易。但是,当我想创建一个规则 4 中的 1 和 3 组合的规则时,我必须验证进入房间的人是否是学生,以及他是否具有“完整”属性。

但是,在验证他是否是学生之前加载状态属性对我来说听起来很糟糕。所以,我只想调用一个加载属性的方法

“一个人是学生,并且有一条规则试图加载属性状态”。

我打算通过 LHS 中的方法调用来做到这一点,这并不简单。

有没有其他办法,我可以处理这个?

4

1 回答 1

2

在大多数情况下,使用小规则来识别特定情况比使用复杂的规则来识别混合情况要好。我不清楚的是您是否想用规则 4 替换规则 3。我将离开规则 3 并创建规则 4,如下所示:

when
    PersonEnteringRoom($p: person, $r: room, person.type == "Student", person.status == "Complete") // status was set by rule 3.
    Room(this == $r, $t: currentTeacher != null) //the relation could be stablished by rule 1
then
    Notifier.notify($t, "The student has completed the course", $p);
end

当然,这条规则是否适合你取决于其他因素,比如你的执行周期。

希望能帮助到你,

于 2013-01-28T09:42:00.983 回答