KISS 原则:让系统容易理解、维护和操作

做后端久了,我对“方案简单”的理解逐渐从代码少,变成了别人接手时能看懂、上线时能操作、出问题时能定位。KISS 原则提醒我们:在满足实际需求的前提下,尽量避免不必要的复杂度。

KISS 常被展开为 “Keep It Simple, Stupid”,也有强调清晰直白的表达。这里关注它在软件设计中的用法,不把它当成省掉必要机制的理由。

一、简单应该从整个流程衡量

假设后台需要每天生成一份报表。数据量不大,现有数据库可以完成查询,业务也允许第二天查看结果,那么一个定时任务、明确的输出位置和失败告警,可能已经足够。

如果此时引入多套消息队列、分布式编排和通用任务平台,开发出的组件可能更丰富,但团队也需要承担部署、权限、重试、版本和故障定位的成本。没有相应需求时,这些成本很难得到回报。

反过来,若报表有严格时限、任务相互依赖、单次失败会影响结算,那么重试、幂等、监控和审计就可能是必要部分。删掉它们,只是把复杂问题留给了值班的人。

二、把混乱变成清楚的约定

管理中“把复杂问题简单化、把混乱事情规范化”的思路,也适合工程协作:

容易增加理解成本的做法 可以考虑的改进
同一个状态在不同接口中使用不同名称 统一状态定义与转换规则
配置散落在代码、文档和机器中 明确配置入口、默认值和覆盖顺序
每次发版依赖某个人记住手工步骤 用可检查的脚本和短文档固定流程
多种错误都返回空值 定义能区分失败原因的错误处理方式

规范化的目标是减少猜测,不是让每个小功能都多填几张表。需要保留的约定,应当能帮助后来的维护者做出正确操作。

三、几种常见误用

  • 简单等于代码最短。 把验证、查询和副作用挤在一行,往往增加阅读成本。
  • 简单等于不分模块。 职责清楚的边界能降低理解范围,不必要的抽象才是负担。
  • 简单等于永远不用新组件。 新组件能明确降低现有复杂度时,同样可以符合 KISS。
  • 简单等于跳过错误处理。 正常路径短了,故障恢复却可能更困难。

四、评审时我会问的几个问题

先确认当前需求、数据规模和可靠性目标,再比较可行方案。这个组件解决了哪个已经存在的问题?同事能否用几句话解释完整的数据流?失败后怎么发现、重试和恢复?去掉一层抽象后,职责会更清楚还是更混乱?

这些问题比“用了多少技术”更有助于选择方案。先把当前问题解决清楚,保留合理的演进空间,再由真实需求推动下一步设计。

相关笔记:系统设计。


文章作者: Crazy Boy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Crazy Boy !
赏

留言

想法、疑问或勘误,都可以写在这里。留言会公开显示。

正在准备留言区…

 上一篇
MySQL 中 IN 与 EXISTS:语义、NULL 与执行计划 MySQL 中 IN 与 EXISTS:语义、NULL 与执行计划
“子查询表大用 EXISTS,子查询表小用 IN”是一条常见口诀,但我不会直接把它当成 SQL 改写依据。选择之前,先确认查询要表达什么,尤其是有没有 NULL,再看具体版本和执行计划。 本文的优化器说明按 MySQL 8.4 文档核对;较
2026-10-20
下一篇 
密码安全:弱密码、撞库与账号防护 密码安全:弱密码、撞库与账号防护
密码安全不能只看有没有大写字母、数字和符号。一个看起来“符合规则”的口令,如果容易猜到、曾经泄露,或者在多个网站重复使用,同样可能让账号失守。 从后端开发的角度,我更愿意把它分成两件事:用户如何选择和保管密码,系统如何验证、存储并保护登录过
2026-10-19