激光机编码总结


1、拆分库/模块(减少编译时间,提高结构清晰度),注意要把通用的剥离出来;

2、高层模块不直接调用底层模块具体类,二是通过调用底层模块的抽象接口(比如主程序为高层模块,文本节点和路径为底层模块,底层模块抽象出一个接口出来,参考依赖倒置原则DIP);

3、版本号的问题(库是否要版本号,或者它与主程序是否共用同一版本号);

4、确保只有单向依赖,不能出现双向依赖;

5、深刻理解MVC结构;

Model : 数据存储
View : 视图显示
Control :行为控制

6、与android交互功能没有单独剥离出来,比如U盘插拔事件监听等,应该独立另外一个程序出来;

7、主程序代码太多,影响编译时间,应该分模块出来,以库形式加载,main所在工程尽量少代码;

8、尽量少继承自QObject,由于元对象机制所在,会生成多余的代码量;

9、设计的时候要考虑到大数据或大文件等极限值;

10、FormEditTreeView没做好,FormEditorItem该取消;

11、宗旨:提供接口和协议供外部调用;

12、框架思想借鉴操作系统(内核+系统调用+外壳+界面操作);

13、现状为没有框架体系,对它的修改具有破坏性,不牢固;

14、软件更新loader不能自更新,可以创建一个功能最简单的loader,再创建对应的子loader,父loader只负责更新和启动子loader;

15、自定义日志类,方便调试,可以保存在内存中,文件中等;

16、特性(高度可定制性)

  • 开机画面更新;
  • 软件logo;
  • 界面主题配色;
  • 升级便捷;
  • 开机动画;
  • 功能模块化;
  • 多用户管理;
  • 远程终端;
  • 多国语言(输入法,关机重启界面等);
  • 日志记录(可以多进程通信实现,主程异常后,日志程序能照常记录);
  • 通讯控制(可修改内容,硬件参数,切换文档等),通讯调试;
  • 多平台支持(windows、Android);
  • 自动备份(考虑到标刻中,备份速度要快);
  • 命令模式;
  • 简易DIY桌面;
  • 重码检测(序列号,数据库,VIN码等);
  • 内部集成使用手册;
  • 版本控制;
  • 权限定制;
  • 取各个标签中心作最短路径优化;
  • 输入法特殊字符;
  • 协议插件(串口,网口等可切换协议);
  • 支持普通模式与性能模式切换(性能模式下主要优化大数据容易卡顿问题,比如对大图形填充后的缩放显示);
  • 测试文档样例;
  • (点阵、单线,双线)字符等宽;
  • 支持关闭/更新后台,loader程序;
  • IO切换文档;
  • 通过委壳shell操作软件,可以编写自动化测试工具;
  • 桌面版也支持U盘导入导出(方便桌面版与移动版的资源同步,避开在保存文档同时保存资源引起的效率问题。由于Qt5接收不到windows事件,可以写个windows工具完成,android系统下一样原理);
  • 支持在文档导出界面可选关联资源,在导入界面默认关联资源(无需选择);
  • 关于属性区与编辑内容刷新问题,2种流向,①属性区更改->编辑内容刷新->属性区刷新,②编辑内容改动->属性区刷新;
  • 获取加密失败后,有个未知错误提示,使打标数据紊乱;
  • 校正方法简单(如红光可以在显示中键盘或按钮移动它);
  • 选中标签后弹出常用操作,比如填充,删除,对齐等;
  • 路径支持连接,如0.03mm间距的直线可以连接上,用于解决线条不闭合问题;
  • 多文档IO打标;
  • 写入缓存文件的时候也要附加上版本号,以便更新版本后,缓存需要清空情况(比如dxf缓存);
  • 关于死机一直重启问题,可以在软件运行一段时间后,发送给linux监听器确认正常运行,否则监听器在固定时间后启动loader更新器;
  • 关于防止破解版更新固件,可以在固件里存放某个正版检测软件,每次更新固件前都解压该软件,然后运行检测,loader根据此检测结果来判断是否继续更新(另外也可以在导入导出部分也检测);
  • 软件APK管理器;
  • 文档旋转打标;
  • 支持一键重置软件(用于客户使用不了情况下,需要重置验证,前提是默认设置下是可以打标的);
  • 出货默认打开含公司logo的文档;
  • 登录管理员需要每次输入密码,工程师可以设置记住密码;
  • 将UI上的按钮动作交由Action类执行,Action获取调用其它对象接口来获取资源并执行,这样有利于在其他地方共用此动作;
  • 框架底层的职责一般是提供获取资源的接口,框架上层一般是执行工作;
  • 插件/模块按需加载/卸载(不占用资源);

17、app版本号,底层版本号,控制板版本号(作用:比如app更新了,底层可以不更新,方便固件打包)

18、程序自检功能(比如软件上查看底板IO口是否正常);

19、程序=框架+组件,框架=逻辑框架(项目相关)+软件框架(项目无关,比如redo/undo、插件管理等)

20、插件/模块配置文件或数据统一由userdata文件夹为根目录,好处是在app根目录下不会出现每个插件/模块的配置数据;

21、draworder控制不能redo/undo,控制混乱;

22、插件版本号问题,出现低版本打开高版本插件情况;

23、界面脚本(qml)独立成一个资源包,按主题加载,切换UI界面方便;


上篇: 如何选择工具以提高竞争力 下篇: 反向面试