Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 数据结构:是否有类似于双向观察者模式的东西?_Design Patterns_Data Structures_Observer Pattern - Fatal编程技术网

Design patterns 数据结构:是否有类似于双向观察者模式的东西?

Design patterns 数据结构:是否有类似于双向观察者模式的东西?,design-patterns,data-structures,observer-pattern,Design Patterns,Data Structures,Observer Pattern,所以我有一个这样的场景,学生和课程 学生A报名参加课程1、2 学生B报名参加课程1、2、3 学生C报名参加课程2 所以有两种事件: 学生A被删除->需要通知两个对象:课程1和课程2 课程1取消->需要通知两个对象:学生A和学生B 我知道,如果每个学生只能注册一门课程,观察者模式就可以工作,在这种情况下,我有一个观察者模式中每个课程对象的学生列表 我想知道我是否应该做一些双向观察者模式(学生保留课程列表,课程也保留学生列表)。那么,这是解决这个问题的好办法吗?主要关注的是速度/空间的权衡(我现在最

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

学生A报名参加课程1、2

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

学生C报名参加课程2

所以有两种事件:

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

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

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


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

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

我想你可能要考虑的是另一个类别:招生。也就是说,学生A在日期Y注册了课程X。如果课程被取消,您将级联删除注册,然后当您转到该学生查看他注册的课程时,您将不再看到该课程


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

为什么要关心模式?做你自己的事。。。至少在qt(示例)中,您经常有一个对象和一个与属性关联的小部件,它们相互监视。但是,当删除课程对象时,如何遍历与课程对应的所有注册对象?有没有快速的方法?那么当学生被删除时呢?你可以进行软删除(在类型字段中更新一个
deleted_),而不是真正的删除,这样行就在那里,只是不活动。注册也是这样。老实说,确切的细节在很大程度上取决于实际的业务需求。所有者(您?)是否希望删除后的学生在那里?他们想要注册历史记录吗?etc@user1141665如果您使用持久性框架,它会做到这一点,例如Hibernate或核心数据。不需要额外的工作,它将是原子的。@JimDeville当然这取决于需求。“我主张在关联类中采用更具可追踪性的方法。”Rob表示同意。我的评论并不是要批评你的答案,而是要补充你的答案来回答他的问题