Qt 上位机开发:最近一年关于软件架构的一些思考

📅 2026/7/3 8:57:43 👁️ 阅读次数 📝 编程学习
Qt 上位机开发:最近一年关于软件架构的一些思考

最近开发的Xrd设备软件功能越发的复杂的,不仅要支持机械臂自动化测量、也要加原位系统、现在又要加入类似测量计划的功能(就是制定一批测量任务,测量时可以修改角度、电流、电压等参数),之前的那套通过配置文件在软件初始化时创建业务逻辑的思路可能就不太好用了,想了几天,通过在测量Command中使用策略模式来进行测量模式的解耦是个好的办法。实现可能半天的时间,但是想这个却花了我大概两天的时间。刚好好久也没写博客了,就借着这个机会写一篇最近一年的工作感悟吧。

1.工作经历

  • 自己从校招开始就进入了谱育科技。三年的时间里,我先后做了两年软件开发和一年算法开发,主要利用近红外光谱技术进行水质污染物检测。刚参加工作时,对各种新技术、新语法都充满了好奇,总想着把最新的东西用到项目里,也因此被领导批评过,当时不懂,现在渐渐理解了。软件工程首先追求的是稳定、可维护和团队协作,而不是单纯地追求技术的新颖。代码规范、项目管理、需求评审、版本管理这些看似不起眼的东西,反而成为后来受益最大的财富。离开之后我才发现,大公司带给我的不仅仅是技术,更是一套正确的软件工程思维。
  • 然后就是进入合肥这边什么智控了,干了三年,被PUA了一年,最后觉得干下去会影响自己的身体健康,就换了个工作。这段经历真正让我深入接触了 Qt,也让我开始思考如何设计一套能够长期演进的软件架构。随着项目数量越来越多,我逐渐把之前学习过的设计模式、重构思想以及分层设计真正应用到实际项目中,并不断沉淀出属于自己的上位机开发框架。采用了配置优先、工厂模式、反射、命令模式、策略模式等思想,能够兼容多个型号的设备,也顺利经受住了现场项目的考验。但那时对于多线程的了解还不够深刻,所以对于多线程的使用也是非常保守,原则就是能不用多线程就不用多线程,在一些场景下界面会卡顿。
  • 最后就是现在的公司,这半年的感受就是,氛围比较轻松,制度很少,需要自己主动去推进项目,写代码写起来很有劲,甚至脸上的痘痘都少了(可能是在上家公司太压抑了)。接触到了更加复杂的 XRD 设备研发。相比之前的项目,软件复杂度又提升了一个层次,不仅涉及高精度运动控制、面阵探测器数据处理、德拜环矫正、多设备协同,还需要支持机械臂自动化、原位实验以及越来越复杂的测量流程,可以说是最近及奶奶软件设计难度的巅峰之作了。这些业务不断推动着软件架构持续演进,也让我开始重新思考框架设计的边界。之前沉淀的框架仍然能够继续使用,但随着业务的发展,也在不断补充多线程通信、设备状态监控、缓存优化以及界面设计规范等内容。最近新增的测量计划功能,更让我意识到原有基于配置文件生成业务逻辑的方式已经难以满足复杂需求,这也是我重新思考命令模式与策略模式职责划分的原因。
  • 技术方面,也是从前期的C#到现在的Qt,另外经常会用python做一些数据分析,比如说最近的Xrd数据拟合矫正的算法,但是先从python上实现优化后再移植到Qt上的,python在做数据处理和算法原型方面还是强的。

2.上位机框架的完善

  • 上家公司就已经创建出这套框架了,原位之前用的是C#,里面对于反射、异步等技术支持的都很完善,所以刚在Qt上使用的时候还踩了不少坑。当时的业务比较简单,每个型号的设备就支持两种测量模式,分别书数据采集和样品测量。所有不同业务的逻辑都写在了配置文件中,然后打包在Qt的资源里。当时用到多线程的地方也就算法处理那一块,设备监控啥的都在主线程,优点是稳定,缺点是会卡。主要是应为当时对Qt的多线程了事件循环什么的了解的不够深刻,一直以为Qt对象不能使用多线程进行操作,现在想想还是要结合Qt的事件循环机制来看待,有事件循环的多线程需要谨慎看待,没有事件循环的其实和普通多线程差不多。
  • 这家公司也是继续沿用这套框架,在使用过程中也借助Qt的多线程+事件循环机制降低了一些通讯订阅的复杂度,完善了modbus多线程调用的逻辑(其实就是加了互斥锁)。另外也利用多线程和缓存技术对modbus点位读写做了很大的优化,现在modbus数据读取可谓是非常丝滑。还有就是对上位机的导航、控制、数据显示等界面做了一套设计规范,整个软件看起来更加简洁了,这里安利一本《认知与设计 理解UI设计准则》,看看对我们这种业余设计师还是优点启发的。
  • 后续要做的就是要完善程序报警相关功能,还有就是基于事件机制的命令执行逻辑,最近做的新项目可以尝试以下看看效果。
  • 之前做的一张UML图:

3.对AI的思考

最近几年AI写代码也是大行其道,前阵子Linus还在吐槽说AI写的代码难以维护,Linux代码审核比较烦。我是和大佬的观点一致,如果完全放弃架构设计,把AI生成的代码不断堆积到项目中,项目最终很容易演变成一个难以维护的系统。AI可以帮我们做一些重复性的活,也可以和我们商量架构的方案,但是不能替代我们的思考过程,主动权还是要掌握在自己手中。平时还是要多看看设计模式、计算机原理、重构等基础书籍,并且在编程中不断内化这些技能,要不然被AI替代是早晚的事。

4.关于未来

最近2年研究了很多关于价值投资的东西,也看了很多巴菲特、段永平这类大佬也书籍和视频。特别是段永平说的那句:“做对的事情,把事情做对”,对我的人生规划有很大的影响。继续深耕仪器仪表领域,不断完善自己的上位机开发思想,在这个细分行业构建属于自己的护城河,从而获得一份不错的薪水。在投资上投资红利低波这类适合普通人的指数基金,为十年后的自己和家人提供另一份稳定的现金流。最后就是继续保持一个对技术的热爱的心,成为一个受人尊敬的程序员!之前不懂如何做对的事情,现在渐渐懂了,很多事情你从十年的角度来看,你就知道是对还是错了,发现错了要及时停止,慢慢的就能把事情做对了。软件架构如此,投资如此,人生也是如此。真正重要的不是一次做得多漂亮,而是不断修正方向,在正确的道路上持续积累。