一,前言
上一篇文件传输系统QT资料打包--Apple的学习笔记提及了我觉得自己架构设计的不好,关于ui界面处理的耦合性太大。并且我后来也想到了用MCV的架构。所以我上去搜索了下基于QT开发的优秀开源工程,我猜测他们有那么多界面交互处理,我可以借鉴他们的设计方法。后来有了点思路。就是QT中可以自定义信号和槽,这给我打开了一种设计思路。
二,MCV的设计模式
module control view是一种流行的设计方式。module可以理解为数据,control可以理解为控制逻辑,view可以理解为显示界面。而我这个应用又没有什么数据库,所以module和control有点融合在一起了,变成了业务逻辑+代理+view。control就变成了一个和界面打交道的中介。而controller和界面的交互就通过emit自定义信号。而业务逻辑和controller可以理解为业务逻辑访问controller的单例进行的交互。至少通过controller似的UI和业务逻辑进行了隔离,我本次的设计目标就达成了。
三,windows串口API实现
之前用的是QT的串口库,感觉还是由自己做会比较灵活。主要是想学习下自己制作的方法。方法就是先找微软官网。在微软的官网看到win32的应用界面开发,是基于事件驱动来显示GUI的,然后简单的看了windows驱动开发,介绍了框架先注册driver再初始化device等,最后我要用的其实是windows已经开发好的串口驱动,并且我不需要win32的GUI开发,所以我要找help中的windows应用开发API,找到了通信相关的,串口通信通过初始化DCB值进行。并且网上后来搜索到很多windows串口API的使用。所以我就不用QT的串口库,用自己的串口库,本来用vc做成了dll,但是QT用的是mingw编译器,所以就不打包为dll库了,直接用自己的源码。
四,修改后的类图
简单来说,我把之前类中存在ui处理的功能都提取到和controller交互,然后controller和UI交互。功能不变。
至少我用doxygen生成的html也好看多了,串口通信和ui是没有任何关的。
五,小结
完成了MCV架构设计,解耦了业务逻辑和UI,但是和controller的交互我觉得做的也不太好,将来有机会学习到新的方法后再优化。另外就是入门了windows的win32 GUI和驱动开发,因为我在找window串口通信API的时候,顺便看了这2个章节。将来把下位机做成某个设备,然后自制一个win10驱动,再做一个win10上位机工具与下位机交互会更好玩的。