比如 A 场景 中有事件: a 事件 b 事件 c 事件 的事件数组
然后 a 事件 中有场景: A 场景 B 场景 C 场景 的场景数组
然后又有 b 事件 需要依赖 a 事件
a 事件被删除了, b 事件也应该要同时被移除.
想了很多种方式, 感觉都需要全量更新, 然后效率也会很慢
1
Chad0000 2021-12-31 14:36:29 +08:00 via iPhone 1
没做过这样的,如果一个事件关联其他的并不是很多,是不是可以考虑事件双方相互保存 ID ,然后通过队列同步操作,比如一方删除另一方通过消息队列同步删。
|
2
kilasuelika 2022-01-02 11:42:38 +08:00 via Android
C++里面的 weak_ptr 是用来解决循环引用传递的。大概是这样的,类外部存储两个事件的 shared_ptr 指针。类内用 weak_ptr 指向这两个事件(用它们的 shared_ptr 指针初始化 weak_ptr )。这个 weak_ptr 不修改引用计数。
但跟你说的这个还有区别,shared_ptr 是根据生命周期自动管理内存的。 针对你的情形,我设想用类似于注册的机制。用一个集中的控制中心,事件创建打表标记哪些事件应该绑定在一起。然后事件消失时,由这个控制中心来根据表注销绑定的事件。 |
3
sillydaddy 2022-01-02 15:29:52 +08:00
考虑效率的话,可以用观察者模式:
「 A 事件」删除时,会对外广播消息,而「 B 事件」注册观察「 A 事件」的消息,然后作相应的处理。这样的话,只有注册(观察)的会被影响。效率比较高。而且观察者模式是一个很常用的去耦合的模式:A 只管广播消息,不用关心谁接收。 类似的,场景之间的依赖也可以这样。 |
4
canxden OP @sillydaddy 现在纠结的点, 不是实现这样的机制, 而是这样的机制, 用什么样的数据结构去存储这种结构. 就是想要持久化这种循环引用的关系, 需要用什么样的数据结构.
|