普通程序员怎么做Qt架构
码农
“分享我在编程中的设计观念,遇到的技术点,让我们在工作和生活中一起追求自由”
这几年,自由的概念让我印象深刻,前不久看到一个词叫辞职自由。
对,我刚刚辞职。站在新公司小山丘前,我想别人在实现财务自由的时候,我在追求加班自由,加班时努力搬砖,同时也有不加班的自由,架构让我们自由。
终将自由
大学毕业至今,一直在医疗器械行业写软件,羡慕过互联网的繁华,曾经也面试过游戏开发岗位,可最终还是在围城里,和同事们调侃,毕生都将献给伟大的民族医疗产业了。
此时还是有很多人像我这样,在传统行业里,默默写着C和C++,用最朴实的开发语言,实现最基础的功能。行业里我们不是光环加身的程序员,工作中有些烦恼耿耿于怀,也会有理想让我蠢蠢欲动,写行业最好的软件,做最纯粹的技术。
随便一个人可以做架构吗
我认为不能,但是普通的程序员都是有机会做架构的。
首先看看软件团队都有些什么角色,我们的软件团队比较小,由一个技术主管,2-3个技术骨干,3-5个普通工程师组成。文中的问题就是,这3-5个普通工程师,怎么将自己的写的代码,纳入公司的软件框架中。
回顾上一周的工作,高老师负责系统鼠标资源管理,开发过程中遇到了一个问题,QGraphicsView被QWidget遮挡后,QGraphicsItem无法通过grabMouse获得鼠标移动事件,我跟高老师一起调试了Qt源码。后来高老师还指导小王同学,调整了对话框下一个复杂的qss样式。
这些工作中,鼠标资源是系统框架的一部分,调整qss则是属于应用功能开发。
可以看出,高老师是技术骨干,他会负责系统框架相关的开发任务。小王同学则是普通工程师,他的任务大多是与UI界面相关的,极少有机会修改系统框架代码。
与系统相关的公共服务接口,高老师会提前将这部分写好。
企业中软件架构的分层
想要将自己的代码,纳入公司的软件框架中,首先要知道目标,需要写哪部分的功能代码。
企业软件架构中,考虑到平台化的需要,将公共的部分设计成平台层,每个产品间有差异的部分设计成产品层。平台层包含核心机制、业务框架、业务逻辑、UI图形框架,产品层更过多的是初始化配置,流程控制,UI界面相关的功能。
架构分层设计
平台层的核心机制、业务框架、UI图形框架就是软件框架的目标。
软件框架提供什么
软件框架的核心,是解决开发过程遇到的通用问题,如何接受输入,如何进行对象间通信,如何呈现输出,在此基础上再考虑解耦,性能,安全,和需求扩展的可能性。
以超声软件框架为例,我们的基础框架使用Qt,在Qt之外还补充了一些核心的机制,比如:异步日志系统,Dump机制,事件机制,对象关系映射框架,内存池。
业务框架是针对自身特殊业务提供服务,比如:图像引擎,参数系统,预置框架,系统通知等。
图形应用框架,包括界面相关公共代码,比如:多屏幕管理,主界面分层,UI控件动态加载,系统资源管理器,光标资源,触摸屏框架,及超声主程序的字体、风格、多语言管理机制。
哪个都不是好啃的骨头。
核心模块的需求
写框架功能之前首先要思考为啥呢要写,写了之后能解决什么问题。
以事件机制为例,我们在Qt事件机制基础上,增加了自定义事件的处理,目的是提供对象间通信,并解除通信对象间的直接依赖。
Qt提供了信号槽,实现对象间的通信。从对象依赖关系的角度看,信号和槽虽然是松散耦合的,发出信号的类不知道哪个对象槽接收信号;但是在connect建立信号槽关联时,必定有一个类依赖信号对象和槽对象,通常这个类就是槽。
另外,信号槽机制需要建立在已知对象指针的基础上,也引入了额外的依赖关系。
还有某些场景下,槽对象无法获取信号对象信息,它根本就不知道信号从哪里发出。
如果我们提供一个机制,可以很轻易实现,互不关联的2个对象通信,也就是接口的调用,是不是很香。
提供对象间通信机制,和解耦机制,是企业软件架构的基本需求。
核心模块怎么写
在面向对象设计中,我认为关键是做好2件事,分清职责和解除依赖,软件框架的实现也无非如此。
对于如何使用Qt自定义事件,实现对象间的通信,我画了一个简单的实现过程,感兴趣的同学,可以关注我后续“终将自由”系列的文章,我将和大家一起,逐步分析传统行业中企业软件架构的实现过程。
基于Qt事件机制的对象通信
祝你自由
如果小王同学不断追求进步,他会承担一个独立模块的开发任务,或者找到目前软件框架中不合理的地方,他就有机会进行优化重构。
比如,对于复杂的qss,如果其他的功能也需要用到,他可以封装一个包装类,放在UI框架中。
随着小王的代码,在框架出现的频率越来越高,小王就会变成技术骨干老王,祝他自由。
如果觉得文章有用请关注我的微信公众号
编辑于 2020-04-11 11:56
软件架构
程序员
程序员修养
请登录后查看评论内容