c – 在分离的设计层之间有效地传递通知
我正在升级数据与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表示以进行更新以反映这些更改. 解决方法
一种用于解耦通信的通用机制是
publish-subscribe pattern.在这种情况下,更新的对象会将通知发布到消息队列,然后消息队列负责通知已注册该队列的UI组件有兴趣接受该特定通知类别.
原则上,这与您已尝试过的UI注册表类似.主要区别在于,要更新的UI组件不是完全由其引用的对象标识,而是由通知类型标识. 这允许在特异性和状态保持之间进行权衡:如果建立模型使得与对象obj相关联的每个UI组件通过obj的每次更新得到通知,则它等同于UI注册表.另一方面,可以安排模型,使得每当对象的某个子类别发布更新时通知某些UI组件,然后每个组件可以检查自己是否需要基于该内容修改其状态.通知.极端情况下,任何Object发布的任何消息都可以通知每个UI对象,这相当于全局的“更新-UI-状态”方法. 发布 – 订阅模型包含这两个极端,但也包括介于两者之间的范围,您可以在其中找到合适的折衷方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- objective-c – 捕获NSTextField中的“up”和“down”键
- [Swift]自定义数据结构:优先队列PriorityQueue
- Oracle 一个事务的完整流程分析
- postgresql – AWS RDS:如何连接到实例
- 依赖注入 – IoC容器和域驱动设计
- c# – 访问冲突:尝试读取或写入受保护的内存
- objective-c – gdb控制台上的命令是什么?
- applicationContext-common.xml 之spring tx:advice 和 aop
- 编译 – 一个非常简单的Makefile应该如何在linux下的Cuda编
- c# – 在WP7中更改聚焦文本框背景/前景