回顾我的软件开发经历:开发DAB 背景介绍DABDevice Automation Bus是一种基于 MQTT 通信的轻量级协议主要用于连接客厅中的消费电子产品如智能电视和游戏机并实现自动化测试。由于设备认证需要支持 DAB 功能我们面临了开发 DAB 软件的紧迫任务。时间紧、任务重挑战巨大。第一阶段学习与调研学习 DAB 协议在项目初期我深入学习了 DAB 协议并将其整理成文档与团队分享。通过快速学习我对 DAB 的整体架构和功能有了全面的理解并整理出了 28 个核心接口。在此过程中我发现了第一版协议中缺少对通信设备的标识。第二版协议中增加了设备标识功能。调研设备现状根据 DAB 协议我对当前设备的基本情况进行了详细调研重点分析了以下问题实现 DAB 需要哪些组件和功能现有设备中是否有可复用的组件或功能如何最大化复用现有资源通过调研我明确了设备现状并制定了两种实现方案。第二阶段方案设计与技术选型两套实现方案我设计了两套 DAB 实现方案方案一在电视外部部署 MQTT 服务。方案二复用电视内部的 MQTT 服务。经过评估方案二在认证场景中更具优势因为它减少了外部依赖简化了部署流程。然而复用设备内部的 MQTT 服务也带来了潜在的安全风险。为此我们采取了以下安全措施云端授权机制。超时自动关闭功能。2. 开发语言选择在开发语言的选择上我们综合考虑了以下因素DAB 开源 Demo 的语言支持。认证设备的语言兼容性。尽管团队更熟悉 C但为了缩短开发周期并赶上设备认证时间点我们最终选择了 Node.js。此外我们将 DAB 服务集成到现有进程中减少了服务数量并复用了设备功能。第三阶段Node.js 版本的开发与挑战开发过程使用 Node.js 开发 DAB 的过程中我们充分利用了其单元测试功能显著提升了开发效率和质量。然而我们也遇到了一些挑战内存泄漏问题由于进程内存增加导致异常通过调整参数解决了这一问题。接口与设备功能的适配DAB 接口需要与多个设备功能模块对接涉及多个项目组的协作沟通成本较高。2. Node.js 版本的局限性尽管 Node.js 版本成功支撑了多个设备的 DAB 认证但仍存在以下问题1.部分设备不支持 Node.js。2.安全相关处理与业务逻辑分布在不同的进程中由不同部门负责协调成本较高。第四阶段C 版本的重构与优化开发背景为了解决 Node.js 版本的局限性我们开发了第二版 DAB采用 C 实现。这一版本不仅避免了部分设备不支持 Node.js 的问题还将安全处理逻辑集成到 DAB 内部减少了跨部门沟通的复杂性。多平台支持与灵活性在第二版设计中我们特别注重灵活性和多平台支持支持在 Windows、公司开发平台以及设备上运行。既可以独立运行也可以嵌入到其他进程中。为了实现这一目标我添加了一个适配层用于屏蔽不同平台的差异。适配层提供了多种实现策略根据运行场景动态选择从而加快了开发和调试速度。第五阶段开发中的经验与反思项目管理与沟通由于时间紧迫我采取了以下措施确保项目顺利推进提前与参与者沟通明确目标、时间要求和注意事项。使用 Jira 工具进行任务分解和进度跟踪。在开发过程中及时纠偏确保项目按计划进行。2. 技术设计与优化在技术实现上我遵循了正交性原则尽量减少模块之间的耦合。例如使用函数对象代替接口使每个模块独立且无依赖。为每个模块编写单元测试提升开发质量和速度。然而在适配层设计中我一度犯了过度设计的错误尝试将 Netflix 的 C 语言面向对象实现引入项目中。经过反思我及时调整了设计简化了代码结构。调整前的代码–#include#include#include “dab/dab_api.h”extern “C” {struct DAB_API_IO {DAB_Interface iface;bool (*getKeyList)(std::vectorstd::string list);bool (pressKey)(const charkey, int durationMs);bool (catpureImage2png)(const charfile);};const DAB_API_IO getDABAPIIO();}调整后的代码–#pragma once#include#includeextern “C” {bool dab_api_getKeyList(std::vectorstd::string list);bool dab_api_pressKey(const char* key, int durationMs);bool dab_api_catpureImage2png(const char* file);}第二版的亮点与遗憾亮点1.单元测试摆脱环境依赖在开发云平台、设备等环境中快速执行测试提高开发效率。2.灵活的部署支持在 Windows、开发云平台和设备上单独运行也可以嵌入到其他进程中运行极大提升了灵活性。3.适配层隔离变化使代码逻辑快速稳定。4.灵活的接入策略为各平台切换提供便利即使在依赖项不具备的情况下也能顺利开展工作。5.与实践结合提出了许多对测试有用的应用场景和扩展。6.高效的开发速度通过合适的模式和策略极大加快了开发速度。7.文档生成代码实践了由文档生成代码的方式加快了开发速度并保证了准确性。遗憾1.嵌入进程的部署方式增加了对安全性的依赖特别是对安全性的要求更高。2.与实践结合的时机最初主要围绕认证需求开发未能更早与实践和用户结合导致成熟速度较慢。总结通过 DAB 的开发我深刻体会到在紧迫时间内完成复杂项目的挑战与成就感。从协议学习到多平台实现我们不仅解决了技术难题还优化了团队协作和项目管理流程。DAB github地址xumingxsh/dabDAB标准https://github.com/device-automation-bus/dab-specification-2.0关键词DAB、MQTT、Node.js、C、多平台支持、正交性原则、单元测试、项目管理

相关新闻

最新新闻

Lightpanda:一次跑100个JS页面只要123MB的无头浏览器

Lightpanda:一次跑100个JS页面只要123MB的无头浏览器

Lightpanda:一次跑100个JS页面只要123MB的无头浏览器 【免费下载链接】browser Lightpanda: the headless browser designed for AI and automation 项目地址: https://gitcode.com/GitHub_Trending/browser32/browser 你的爬虫集群还在用 headless Chrome 渲…

2026/9/2 11:08:25
Rufus USB 启动盘制作教程:5分钟搞定安装盘,老电脑也能装 Windows 11

Rufus USB 启动盘制作教程:5分钟搞定安装盘,老电脑也能装 Windows 11

Rufus USB 启动盘制作教程:5分钟搞定安装盘,老电脑也能装 Windows 11 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus Rufus 是一款免费开源的 U 盘格式化工具,…

2026/9/2 11:08:25
蔡司三坐标测量机Calypso检测报告模板设计与质量追溯实践

蔡司三坐标测量机Calypso检测报告模板设计与质量追溯实践

很多精密制造企业在使用蔡司三坐标测量机时,往往把注意力集中在测量程序编写和特性检测上,却容易忽略最后一步——检测报告模板的设计。实际上,检测报告不仅是测量结果的载体,更是质量追溯、客户审核、体系认证中的关键证据。如果…

2026/9/2 11:08:25
FFmpeg整理个人视频库:从摸底、转码到批量处理全流程

FFmpeg整理个人视频库:从摸底、转码到批量处理全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/2 11:08:25
沙特Lumina满改HSV GTS:后驱平台动力重构与数据验证全解析

沙特Lumina满改HSV GTS:后驱平台动力重构与数据验证全解析

如果你经常刷中东汽车内容,大概率会看到一台挂着沙特牌照的雪佛兰 Lumina,车尾却贴着 HSV GTS 的标识。很多人第一反应是:这又是一台“贴标改装车”。但真正玩过通用后驱平台的人知道,这件事没那么简单。原因在于,雪佛…

2026/9/2 11:08:25
Python提取PDF表格:从pdfplumber到camelot的完整指南

Python提取PDF表格:从pdfplumber到camelot的完整指南

为什么 PDF 中的表格提取总是“翻车”?很多同学拿到一份带表格的 PDF,第一反应是复制粘贴到 Excel,结果发现表格完全错位、换行丢失、单元格内容粘成一坨。换了几个在线工具,要么要付费,要么导出的表格在 Excel 里根本…

2026/9/2 11:03:25