第1讲为什么你的项目越来越难维护《嵌入式软件架构设计30讲》系列开篇大家好我是一名从业15年的嵌入式软件架构师。这些年做过消费电子、智能家居、穿戴设备、物联网终端以及工业控制产品也接手过不少“祖传项目”。有趣的是无论行业如何变化大多数团队最终都会遇到同一个问题项目刚开始开发得很快后面却越来越难维护。新增一个功能需要改十几个文件。修复一个Bug可能引入三个新Bug。新人接手项目看不懂。老员工离职后没人敢改代码。那么问题来了为什么项目会从“简单易维护”一步步变成“谁都不敢碰”今天我们就来聊聊这个话题。一、项目是如何一步步失控的先来看一个典型项目的发展过程。项目刚开始时intmain(void){LED_Init();while(1){LED_Toggle();DelayMs(1000);}}代码不到100行。逻辑简单。结构清晰。开发效率极高。产品经理看了以后很满意挺好再加个按键吧。于是while(1){KeyScan();LED_Process();}项目依旧简单。然后需求继续增加OLED显示蓝牙通信温湿度采集电池管理代码慢慢变成while(1){KeyScan();Sensor_Read();OLED_Update();BLE_Process();Battery_Check();}看起来问题也不大。但半年后。需求越来越多OTA升级手机APP云平台数据同步日志系统此时工程规模已经从几百行增长到几万行。开始出现一些奇怪现象修改蓝牙代码。显示功能异常。修改显示逻辑。功耗增加。增加一个传感器。OTA升级失败。整个系统仿佛变成了一个连锁反应机器。二、问题真的出在代码质量吗很多工程师会说因为代码写得太烂。这句话对但不完全对。因为代码质量差只是表象。真正的问题是系统复杂度失控了随着需求增加模块越来越多数据越来越多依赖关系越来越复杂如果没有架构设计。系统会像滚雪球一样不断膨胀。最终变成一团无法拆开的毛线球。三、最危险的代码全局变量很多项目中都会看到这样的代码externuint8_tble_connected;externuint8_tbattery_level;externsensor_data_tsensor_data;刚开始觉得非常方便。想用数据直接访问。想修改状态直接赋值。开发速度飞快。但是随着项目变大externxxx;externyyy;externzzz;...全局变量越来越多。每个模块都可以访问。每个模块都可以修改。最后出现的问题就是没人知道变量在哪里被修改。没人知道哪些模块依赖它。例如battery_level10;这句代码执行后电源模块会响应显示模块会刷新蓝牙模块可能发送通知日志模块可能记录事件看似修改了一个变量。实际上影响了整个系统。四、模块之间为什么越来越耦合再来看一个例子。显示模块中if(ble_connected){OLED_ShowString(BLE OK);}很多人觉得很正常。但这里已经埋下了隐患。因为显示模块已经依赖蓝牙模块。换句话说显示模块知道了蓝牙模块的内部状态。未来如果蓝牙逻辑变化ble_connected改成ble_state显示模块也必须修改。这就是耦合。耦合最大的特点是修改一个模块影响多个模块。项目越大。问题越明显。五、为什么很多项目后期开发越来越慢很多团队都有这种感受项目第一版开发用了3个月。第二版开发用了6个月。第三版开发用了1年。为什么因为后期开发时间大部分不是在写代码。而是在理解代码。举个例子。新增一个BLE广播功能。真正写代码可能只需要2小时。但为了确认影响范围阅读旧代码查找依赖关系回归测试可能需要2天。这说明什么说明系统复杂度已经超过了团队的掌控能力。六、优秀项目是如何设计的我曾参与过一个智能穿戴产品开发。软件代码量超过20万行。开发周期接近5年。期间经历多次功能升级。系统依然稳定。核心原因只有三个。1. 明确模块边界例如BLE模块 显示模块 传感器模块 电源模块 存储模块每个模块职责单一。不做越界的事情。2. 统一接口设计模块之间只能通过接口访问。例如boolBLE_IsConnected(void);显示模块可以询问蓝牙是否连接。但不能直接访问内部变量。3. 数据统一管理数据有唯一拥有者。例如电池数据 ↓ 电源模块维护 传感器数据 ↓ 传感器模块维护其他模块只能读取。不能随意修改。七、架构设计的本质是什么很多人把架构理解得很复杂。实际上架构设计只有一个核心目标控制复杂度项目小时候。谁都能开发。项目长大以后。决定系统寿命的不是代码能力。而是控制复杂度的能力。优秀架构带来的收益✅ 新功能容易扩展✅ Bug容易定位✅ 新人容易上手✅ 模块可以复用✅ 团队协作效率更高而糟糕架构带来的结果❌ 谁都不敢改代码❌ 修改一个功能影响全局❌ Bug越来越多❌ 开发效率越来越低❌ 项目逐渐失控八、写在最后很多工程师工作多年后会发现真正限制自己成长的。已经不是语法。也不是驱动开发能力。而是系统设计能力。从“写功能”到“设计系统”。这是嵌入式工程师成长过程中最重要的一次跨越。在接下来的《嵌入式软件架构设计30讲》中我们将从实际项目出发系统讲解高内聚低耦合模块化设计分层架构状态机设计事件驱动架构FreeRTOS架构设计BLE产品架构设计希望帮助大家少踩坑少走弯路。本讲总结项目越来越难维护通常不是因为代码写得差而是因为模块边界不清晰全局变量泛滥模块耦合严重缺少统一接口系统复杂度失控记住一句话软件架构的本质不是炫技而是控制复杂度。这是成为高级工程师和架构师的第一课。
第1讲:为什么你的项目越来越难维护?15年架构师告诉你真正原因
发布时间:2026/6/10 12:33:15
第1讲为什么你的项目越来越难维护《嵌入式软件架构设计30讲》系列开篇大家好我是一名从业15年的嵌入式软件架构师。这些年做过消费电子、智能家居、穿戴设备、物联网终端以及工业控制产品也接手过不少“祖传项目”。有趣的是无论行业如何变化大多数团队最终都会遇到同一个问题项目刚开始开发得很快后面却越来越难维护。新增一个功能需要改十几个文件。修复一个Bug可能引入三个新Bug。新人接手项目看不懂。老员工离职后没人敢改代码。那么问题来了为什么项目会从“简单易维护”一步步变成“谁都不敢碰”今天我们就来聊聊这个话题。一、项目是如何一步步失控的先来看一个典型项目的发展过程。项目刚开始时intmain(void){LED_Init();while(1){LED_Toggle();DelayMs(1000);}}代码不到100行。逻辑简单。结构清晰。开发效率极高。产品经理看了以后很满意挺好再加个按键吧。于是while(1){KeyScan();LED_Process();}项目依旧简单。然后需求继续增加OLED显示蓝牙通信温湿度采集电池管理代码慢慢变成while(1){KeyScan();Sensor_Read();OLED_Update();BLE_Process();Battery_Check();}看起来问题也不大。但半年后。需求越来越多OTA升级手机APP云平台数据同步日志系统此时工程规模已经从几百行增长到几万行。开始出现一些奇怪现象修改蓝牙代码。显示功能异常。修改显示逻辑。功耗增加。增加一个传感器。OTA升级失败。整个系统仿佛变成了一个连锁反应机器。二、问题真的出在代码质量吗很多工程师会说因为代码写得太烂。这句话对但不完全对。因为代码质量差只是表象。真正的问题是系统复杂度失控了随着需求增加模块越来越多数据越来越多依赖关系越来越复杂如果没有架构设计。系统会像滚雪球一样不断膨胀。最终变成一团无法拆开的毛线球。三、最危险的代码全局变量很多项目中都会看到这样的代码externuint8_tble_connected;externuint8_tbattery_level;externsensor_data_tsensor_data;刚开始觉得非常方便。想用数据直接访问。想修改状态直接赋值。开发速度飞快。但是随着项目变大externxxx;externyyy;externzzz;...全局变量越来越多。每个模块都可以访问。每个模块都可以修改。最后出现的问题就是没人知道变量在哪里被修改。没人知道哪些模块依赖它。例如battery_level10;这句代码执行后电源模块会响应显示模块会刷新蓝牙模块可能发送通知日志模块可能记录事件看似修改了一个变量。实际上影响了整个系统。四、模块之间为什么越来越耦合再来看一个例子。显示模块中if(ble_connected){OLED_ShowString(BLE OK);}很多人觉得很正常。但这里已经埋下了隐患。因为显示模块已经依赖蓝牙模块。换句话说显示模块知道了蓝牙模块的内部状态。未来如果蓝牙逻辑变化ble_connected改成ble_state显示模块也必须修改。这就是耦合。耦合最大的特点是修改一个模块影响多个模块。项目越大。问题越明显。五、为什么很多项目后期开发越来越慢很多团队都有这种感受项目第一版开发用了3个月。第二版开发用了6个月。第三版开发用了1年。为什么因为后期开发时间大部分不是在写代码。而是在理解代码。举个例子。新增一个BLE广播功能。真正写代码可能只需要2小时。但为了确认影响范围阅读旧代码查找依赖关系回归测试可能需要2天。这说明什么说明系统复杂度已经超过了团队的掌控能力。六、优秀项目是如何设计的我曾参与过一个智能穿戴产品开发。软件代码量超过20万行。开发周期接近5年。期间经历多次功能升级。系统依然稳定。核心原因只有三个。1. 明确模块边界例如BLE模块 显示模块 传感器模块 电源模块 存储模块每个模块职责单一。不做越界的事情。2. 统一接口设计模块之间只能通过接口访问。例如boolBLE_IsConnected(void);显示模块可以询问蓝牙是否连接。但不能直接访问内部变量。3. 数据统一管理数据有唯一拥有者。例如电池数据 ↓ 电源模块维护 传感器数据 ↓ 传感器模块维护其他模块只能读取。不能随意修改。七、架构设计的本质是什么很多人把架构理解得很复杂。实际上架构设计只有一个核心目标控制复杂度项目小时候。谁都能开发。项目长大以后。决定系统寿命的不是代码能力。而是控制复杂度的能力。优秀架构带来的收益✅ 新功能容易扩展✅ Bug容易定位✅ 新人容易上手✅ 模块可以复用✅ 团队协作效率更高而糟糕架构带来的结果❌ 谁都不敢改代码❌ 修改一个功能影响全局❌ Bug越来越多❌ 开发效率越来越低❌ 项目逐渐失控八、写在最后很多工程师工作多年后会发现真正限制自己成长的。已经不是语法。也不是驱动开发能力。而是系统设计能力。从“写功能”到“设计系统”。这是嵌入式工程师成长过程中最重要的一次跨越。在接下来的《嵌入式软件架构设计30讲》中我们将从实际项目出发系统讲解高内聚低耦合模块化设计分层架构状态机设计事件驱动架构FreeRTOS架构设计BLE产品架构设计希望帮助大家少踩坑少走弯路。本讲总结项目越来越难维护通常不是因为代码写得差而是因为模块边界不清晰全局变量泛滥模块耦合严重缺少统一接口系统复杂度失控记住一句话软件架构的本质不是炫技而是控制复杂度。这是成为高级工程师和架构师的第一课。