回顾我的软件开发经历:开发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、多平台支持、正交性原则、单元测试、项目管理

相关新闻

最新新闻

netsh wlan 命令深度解析:Windows 11/10 无线网络5大高级管理场景

netsh wlan 命令深度解析:Windows 11/10 无线网络5大高级管理场景

netsh wlan 命令深度解析:Windows 11/10 无线网络5大高级管理场景在Windows系统中,图形界面虽然友好,但对于网络工程师和技术支持人员来说,命令行工具往往能提供更高效、更精准的控制能力。netsh wlan作为Windows内置的无线网络管…

2026/7/12 11:48:24
工业负载控制:TPD2017FN与MKV46F128VLH16的实战应用

工业负载控制:TPD2017FN与MKV46F128VLH16的实战应用

1. 工业负载控制的核心挑战与选型思路 在工业自动化现场,电感和电阻类负载的控制一直是个既基础又棘手的课题。产线上常见的继电器线圈、电磁阀、电机绕组等感性负载,以及加热管、功率电阻等阻性负载,其开关特性差异显著。感性负载在断电时会…

2026/7/12 11:48:24
人形机器人产品化实战:从产线日记看场景化落地

人形机器人产品化实战:从产线日记看场景化落地

1. 项目概述:这不是科幻小说,而是产品经理每天在真实产线里写的流水账“人形机器人 产品经理的日记”——光看标题,很多人第一反应是科幻剧片场,或是某家科技公司放出的概念视频。但如果你真去深圳南山科技园那几栋灰白色厂房转一…

2026/7/12 11:48:24
R3nzSkin无限重连问题终极解决方案:从根源到修复的完整指南

R3nzSkin无限重连问题终极解决方案:从根源到修复的完整指南

R3nzSkin无限重连问题终极解决方案:从根源到修复的完整指南 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin 你是否在使用R3nzSkin这款英雄联盟换肤工具时,遇到了令…

2026/7/12 11:48:24
N_m3u8DL-RE:终极跨平台流媒体下载解决方案,3步搞定视频保存难题

N_m3u8DL-RE:终极跨平台流媒体下载解决方案,3步搞定视频保存难题

N_m3u8DL-RE:终极跨平台流媒体下载解决方案,3步搞定视频保存难题 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trendi…

2026/7/12 11:48:24
基于Verilog的数字图像处理系统设计

基于Verilog的数字图像处理系统设计

基于Verilog的数字图像处理系统设计:毕业设计完整实现方案 一、毕业设计概述 1.1 课题背景 数字图像处理是计算机视觉、人工智能、医疗影像等领域的基础技术。随着FPGA技术的发展,基于FPGA的实时图像处理系统因其并行处理能力强、功耗低、延迟小等优点,成为当前研究的热点…

2026/7/12 11:43:24

月新闻