论基于Qt creator c++工程架构如何组织

初学c,c++编程基本都会遇到一个问题,初学者编写第一个软件基本都照着网络上现有的例程写,也能重现出来,问题不大。但是如果自己想写的软件需要网络上的好几个例程组成的,对初学者来说,就很有挑战性了。想当初我初学c语言的时候,是参考郭天祥的一本书去写,照着书单独写按钮扫描例程,通过;照着写IIC例程,通过;照着写数码管动态扫描例程,也通过。但是想写一个以上3个例程组合起来的程序,如按下按键,数码管计数,同时IIC输出数据,这下就卡住了,脑袋就像短路,暂时想不出什么办法。因为想实现这些功能,还需要懂得一些软件的设计模式,框架,架构等等。
然而,当今网络上搜索某个例程,一搜一大堆,但是搜索关于软件工程架构如何组织反而很少。所以今次我就抛砖引玉讨论下软件工程架构到底是如何组织的。
回到正题,我就说下我的基于Qt creator c++工程架构组织。很多书都说过软件工程要基于模块化设计,模块内高聚合,模块间低耦合。这句话说得没错,我的Qt creator c++工程架构组织也是基于模块化设计。
打开Qt creator,新建项目->Other Project->子目录项目,如下
在这里插入图片描述
在这里插入图片描述
接下随便起个名,选好路径,点下一步,选择构建套件
在这里插入图片描述
接着下一步,直至确定。
在这里插入图片描述
刚新建完的工程项目只有一个pro文件,可以右键项目名称添加或者新建子项目。
在这里插入图片描述
点击 Add Existing Projects 选择一个现有项目的pro文件,就可以将现有子项目添加进工程中,如下
在这里插入图片描述
在这里插入图片描述
一个子项目就是一个模块。一个完整的工程项目就是有n个子项目组成。
在这里插入图片描述
这是一个示例工程,其中有一个是必不可少的,就是main函数所在的模块,如上图的mainapp,其余的模块都是基于mainapp才能运行。
接下来讨论下每个模块到底是一个什么类型的子项目;在我查阅了大量的资料后,认为模块可以为插件形式,也可以是普通动态链接库dll两种类型。这两种本质上都是dll类型,插件形式比普通dll复杂一点;具体区别请大家自己去网上搜索。就我个人意见,插件形式适合多人团队合作开发,普通dll适合个人开发。
有人说过,软件=数据+算法,所以我的示例工程除了一个mainapp外,还有一个模块专门用于管理工程内每个模块的底层数据,实现数据结构与业务逻辑分离。如示例工程的global。global只有一个单例模式的类,类中包含了每个模块的数据结构,自定义的结构体,以及自定义的枚举。global编译生成的是dll,每个模块pro文件只要添加global的头文件和dll库文件,就可以直接操作这个模块。global一旦实例化,对象指针唯一化,数据就成为全局数据,生命周期直至软件关闭。
在这里插入图片描述
采用数据与业务逻辑分离这种做法,我认为的好处是集中管理数据,免得软件复杂度变高的时候,分散的数据太难找,浪费时间。另一个好处是模块间通信的时候,用于通信的函数不需带上数据或数据的指针,通信的函数可以用自定义枚举,或者直接QString 类型当做命令。通信方式如下
在这里插入图片描述
至于坏处就是就是每修改一次global,都需要重新编译所有模块,才能正常运行。因为每个模块都是依赖这个global,修改global,指针指向的内容也变了,如果不更新模块,指针指向错误,造成内存泄漏。
每一个模块俗称轮子,每个轮子内部也可以分层次。不管分多少层,有一层是不可少的,就是与其它轮子打交道的层,称为接口层,用一个类管理;轮子如果带ui,就可以增加一个ui层;还有其它业务逻辑层等等。
至于具体如何设计轮子,将在下一章讨论,准备拿一个串口模块进行讲解。
由于个人水平有限,接触c++时日不多(大概半年),难免会有错漏,恳请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技玩家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值