在系统架构设计中,如果你希望做出“稳定、好维护、可复用”的系统,这五个原则值得你铭记于心。
我们将以简单语言 + 结构化图示,让你快速理解并上手。
耦合(Coupling):模块与模块之间的依赖程度。
内聚(Cohesion):模块内部功能的相关性。
模块之间互不依赖,修改一个模块不会影响其它模块。
每个模块内部功能紧密相关,不杂乱。
✗ 坏例子(高耦合):
[模块A] <----> [模块B] <----> [模块C]
↑ ↓
[模块D] <----> [模块E]
✓ 好例子(低耦合,高内聚):
[模块A] [模块B] [模块C]
↓ ↓ ↓
[驱动层] [通信层] [状态机层]
层级 | 职责示例 |
---|---|
应用层 | 处理业务逻辑、AT命令 |
协议层 | 解析BLE、TCP等协议 |
状态机层 | 管理系统状态、响应事件 |
驱动层 | 控制硬件、调用外设API |
层级分明,便于测试和替换。
每一层只处理自己该处理的事。
[AT命令解析] ←→ [应用逻辑]
↓
[BLE协议处理]
↓
[状态机调度]
↓
[蓝牙/串口驱动]
一个模块、类、函数,只做一件事,并做好这一件事。
void handle_command_and_blink_led_and_parse_json(...) {
// 太多职责混在一起
}
void handle_at_command(...);
void control_led(...);
void parse_json(...);
可测试:每个模块能单独测试?需要依赖别的模块才能跑吗?
可扩展:新增功能时,是否能不改动原有逻辑?
使用接口、抽象层,例如定义 ble_driver_send()
而不是直接调用 hal_uart_send()
。
使用事件队列、状态机来连接模块,而非硬编码逻辑链条。
在任何系统中,出错时能快速恢复,比追求极致性能更重要。
所有 API 返回值必须检查。
使用 Watchdog 保证系统挂掉能重启。
所有通信输入都必须校验合法性。
[串口接收] --> 校验格式 --> 入队列 --> 处理命令
↓
错误?立即丢弃 + 上报
原则 | 核心目的 |
---|---|
低耦合,高内聚 | 降低模块之间干扰 |
分层解耦 | 清晰结构,职责明确 |
单一职责原则 | 每个模块聚焦一个任务 |
可测试、可扩展 | 更容易维护和演进系统 |
容错与稳定优先 | 提高系统鲁棒性与可靠性 |
实践建议:
在做架构设计时,用画图、分层、抽象接口方式思考。
编写每个模块前,先写出职责说明。
系统上线前,重点测试边界条件、异常输入。