【第二篇】 基于 Qt 实现消息总线

        本文是 《Qt 框架性开发实践——基础框架篇》的第二篇。

        本文所讲的内容已经开源,你可以在 这里 找到源代码。  


        消息总线是一种常见的架构模式,它通过隔离生产者、消费者达到解除或者弱化耦合的目的。生产者通过发布消息来展示自己的存在感,消费者通过订阅消息来满足自己的需求。消息总线管理消息,有目标的分发。

        因为比较常用,并且实现简单,在 C++ 语言中也不乏各种消息总线的实现。但是在 Qt 中,利用 Qt 特性来实现消息总线的很少见。

        然而,Qt 的很多特性,能够在消息总线中被应用,比如“信号-槽”本身也是一种发布、订阅的模式,而且还能够执行跨线程分发。另外利用 Qt 的元数据类型系统,可以实现强、弱消息类型的转换,从而让脚本语言(比如 webjs)也能够通过桥接(Hybrid Bridge)实现消息的发布、订阅。

       下图是总线消息的基本结构:【第二篇】 基于 Qt 实现消息总线_第1张图片         在某些情形下,消费者需要给发布者反馈一些消息。一个常用的场景是,订阅者需要拦截发布者继续执行后续动作。

        我们把这种反馈设计为异步的,所以利用了 QtPromise 工具。这是一个第三方 github 开源工具,但是因为比较基础,我们也将用专门的章节,概述一下其基本的设计思路,以及与 Qt 相关的实现细节。

        接下来分三个章节讨论:

  • 用 Qt 信号-槽实现消息分发
  • 消息总线中的弱类型处理
  • 对消息的反馈与异步收集

你可能感兴趣的:(Qt,框架性开发实践,qt,c++)