可能互相循环引用数据应该设计什么样的数据结构

2021-12-31 14:22:07 +08:00
 canxden

比如 A 场景 中有事件: a 事件 b 事件 c 事件 的事件数组

然后 a 事件 中有场景: A 场景 B 场景 C 场景 的场景数组

然后又有 b 事件 需要依赖 a 事件

a 事件被删除了, b 事件也应该要同时被移除.

想了很多种方式, 感觉都需要全量更新, 然后效率也会很慢

900 次点击
所在节点    问与答
4 条回复
Chad0000
2021-12-31 14:36:29 +08:00
没做过这样的,如果一个事件关联其他的并不是很多,是不是可以考虑事件双方相互保存 ID ,然后通过队列同步操作,比如一方删除另一方通过消息队列同步删。
kilasuelika
2022-01-02 11:42:38 +08:00
C++里面的 weak_ptr 是用来解决循环引用传递的。大概是这样的,类外部存储两个事件的 shared_ptr 指针。类内用 weak_ptr 指向这两个事件(用它们的 shared_ptr 指针初始化 weak_ptr )。这个 weak_ptr 不修改引用计数。

但跟你说的这个还有区别,shared_ptr 是根据生命周期自动管理内存的。

针对你的情形,我设想用类似于注册的机制。用一个集中的控制中心,事件创建打表标记哪些事件应该绑定在一起。然后事件消失时,由这个控制中心来根据表注销绑定的事件。
sillydaddy
2022-01-02 15:29:52 +08:00
考虑效率的话,可以用观察者模式:
「 A 事件」删除时,会对外广播消息,而「 B 事件」注册观察「 A 事件」的消息,然后作相应的处理。这样的话,只有注册(观察)的会被影响。效率比较高。而且观察者模式是一个很常用的去耦合的模式:A 只管广播消息,不用关心谁接收。

类似的,场景之间的依赖也可以这样。
canxden
2022-01-06 09:37:53 +08:00
@sillydaddy 现在纠结的点, 不是实现这样的机制, 而是这样的机制, 用什么样的数据结构去存储这种结构. 就是想要持久化这种循环引用的关系, 需要用什么样的数据结构.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/825504

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX