我正在升级一个设计,其中数据与UI轻松耦合:
class Object {
UI * ui;
};
class UI {
Object * object;
};
通过UI指针向UI推送更新通知非常简单,但是新的要求需要将数据完全与UI分离,并且不同的对象具有多个不同的UI表示形式,因此单个UI指针不再起作用,也不能成为数据层的一部分。由于对象数量很高(达到数亿级别),因此无法使用类似QObject和信号的东西,因为它会带来很大的开销,而QObject比层次结构中最大的对象大几倍。对于UI部分来说,这并不太重要,因为每次只有一部分对象可见。
我实现了一个UI注册表,它使用multihash存储所有UI,使用Object *作为键,以便能够获取给定对象的UI并发送通知,但是查找和注册/注销UI会产生显着的开销,考虑到对象数量很高。
所以我想知道是否有一些设计模式可以在解耦层之间发送通知,开销更小?
澄清一下:大多数更改都是在UI端完成的,UI元素保留了与相关对象的指针,因此这不是问题。但是,从UI端对某些对象进行的一些更改会导致数据层中相关对象发生更改,这些更改无法预测,以便请求更新受影响对象的UI。实际上,对一个对象进行的单个UI更改可能会导致级联更改其他对象,因此我需要能够通知其最终的UI表示形式以更新以反映这些更改。