1

所以我有这样的场景,学生和课程

学生 A 就读于课程 1、2

学生 B 参加课程 1、2、3

学生 C 就读于课程 2

所以有两种事件:

学生 A 被删除 -> 需要通知两个对象:Course 1 和 Course 2

课程 1 取消 -> 需要通知两个对象:学生 A 和学生 B

我知道如果每个学生只能注册一门课程,观察者模式就可以工作,在这种情况下,我有一个观察者模式中每个课程对象的学生列表。

我想知道我是否应该做一些两种方式的观察者模式(学生保留课程列表,课程也保留学生列表)。那么处理这个问题的好方法是什么?主要关注的是速度/空间权衡(我现在最多能想到的是从 1 个学生到 1 组课程和 1 个课程到 1 组学生的双向哈希/树)。任何指针将不胜感激!

4

1 回答 1

2

您真正要问的是域模型中的级联语义。例如,如果删除了课程,是否应该删除学生?当然不是。如果学生被删除,课程是否应该被删除?不。

我认为您可能要考虑的是另一门课:注册。这表示学生 A 在日期 Y 注册了课程 X。然后,如果一门课程被取消,您将级联删除注册,然后当您去该学生查看他注册的内容时,您再也看不到该课程了。

此策略的另一个好处是,如果您想保留信息(他已注册并且课程已被取消),则在 Enrollment 类(这是一个 Association 类)中。

于 2013-01-30T01:24:33.047 回答