同事说我写的代码不好看懂,封装太多层
📅 2026/7/18 23:46:54
👁️ 阅读次数
📝 编程学习
一、先分清两种问题:是「过度封装」还是「同事不熟悉你的设计」
1. 真・过度封装(常见特征)
- 简单一行逻辑,拆了 3 层以上函数 / 类跳转,看业务要不停跳转文件
- 为了封装而封装,没有复用价值,只是强行分层
- 命名抽象空洞:
HandleData()、ProcessCore(),看不出做什么 - 中间层只做转发:A 调用 B,B 只转发给 C,无任何加工逻辑
- 基础判断、简单计算单独抽成类,调用成本远大于阅读成本
2. 只是习惯差异(不算封装问题)
- 分层规范统一,只是同事习惯平铺代码
- 封装是为了复用、解耦、隔离第三方依赖
- 每层职责清晰,注释 / 函数名能一眼看懂流程
二、快速自查优化方案
1. 干掉无意义中转层
如果中间函数只有一行调用下级,直接内联,删除多余封装 反面示例:
// 多余中转,纯浪费跳转 void UserService::calcMoney() { m_calc->run(); }优化:直接调用m_calc->run(),删掉一层接口
2. 分层遵循「单一职责 + 控制层数」
通用经验:业务主流程最多2~3 层调用,超过就要合并 / 简化
- 表层:接口 / 控制器(接收参数、参数校验)
- 中层:业务逻辑(核心计算、流程编排)
- 底层:工具 / 数据库 / 第三方(原子能力) 禁止套娃:控制器→A 服务→B 服务→C 工具→D 工具
3. 命名杜绝模糊,降低阅读成本
差:execTask()、doBiz()、dealInfo()好:calculateUserRechargeAmount()、queryOrderUnpaidList()函数名直接说明做什么,不用点进去猜逻辑
4. 长流程增加「扁平聚合入口」
多层拆分后别人读起来绕,可以对外提供一个聚合接口,把完整流程收拢:
// 对外统一入口,同事只看这一个方法就能看懂完整流程 Result UserManager::createRechargeOrder(Req req) { checkParam(req); auto money = calcAmount(req); auto order = saveOrder(money); sendNotify(order); return order; }内部细节拆分,对外入口扁平,兼顾封装和可读性。
编程学习
技术分享
实战经验