数据结构:是否存在类似双向观察者模式的东西?

时间:2013-01-30 00:22:38

标签: design-patterns data-structures observer-pattern

所以我有类似学生和课程

这样的场景

学生A注册课程1,2

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

学生C注册课程2

所以有两种事件:

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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