1️⃣ 粗粒度 vs 细粒度接口
| 特性 | 粗粒度接口 | 细粒度接口 |
|---|---|---|
| 调用单元 | 一次调用完成多步操作 | 每个操作单独调用 |
| 优点 | - 调用次数少,性能好 - 上层逻辑简单 | - 灵活,可组合 - 更易扩展替换部分实现 |
| 缺点 | - 不易修改或扩展 - 下层实现复杂 - 可插拔替换灵活性低 | - 调用开销大 - 上层需要管理调用顺序 - 容易出错 |
| 适用场景 | 常用、稳定、流程固定的功能 | 功能可选、平台差异大、需要轻量裁剪的功能 |
2️⃣ 设计原则
(1)按功能语义划分
-
粗粒度:封装完整业务单元,例如:
int DHCP_ADP_ConfigInterface(ifIndex, ip, mask, gateway);
一次调用完成 接口配置 + IP 下发 + 路由设置 。
适合功能固定、流程稳定、跨平台差异小的操作。
-
细粒度:拆分基础操作,例如:
int IP_AddAddr(ifIndex, ip, mask);
int Route_Add(route);
int If_SetUp(ifIndex);
上层可按需组合,灵活替换或裁剪。
适合复杂系统、可插拔能力、不同产品裁剪需求。
(2)平衡可插拔性和使用复杂度
- 粗粒度接口调用简单,但下层实现不易替换
- 细粒度接口可替换性高,但上层要管理顺序和事务
建议:核心稳定流程用粗粒度接口,平台/可裁剪部分用细粒度接口。
(3)关注平台差异和裁剪需求
- 如果不同平台差异大 → 倾向 细粒度
- 如果产品功能固定 → 倾向 粗粒度
可插拔接口框架最关键的价值在于 替换实现和裁剪,所以细粒度更灵活,但不必拆到每个函数都粒度极小,通常按"原子能力单元"划分即可。
(4)性能和调用频率考虑
- 高频调用 → 粗粒度(减少函数指针调用开销)
- 低频操作 → 细粒度(可组合灵活)
3️⃣ 工程实践建议
-
核心能力(接口/路由/状态机核心操作):粗粒度,稳定调用
-
可选能力(VLAN 扫描、统计、日志、监控等):细粒度,按需组合
-
ops 设计:一个 ops 表可同时包含粗粒度和细粒度接口
-
命名规范:接口名称语义清晰,标明粗/细粒度,例如:
// 粗粒度
int DHCP_ADP_ConfigureInterface(ifIndex, ip, mask, gateway);// 细粒度
int IP_AddAddr(ifIndex, ip, mask);
int IP_DelAddr(ifIndex, ip);
int Route_Add(route);
4️⃣ 一句话总结
接口粒度设计的核心原则是:粗粒度保证调用简单、性能高,细粒度保证可插拔性和灵活裁剪。根据功能稳定性、平台差异和调用频率平衡设计。