为什么你的代码迟早会崩成"意大利面"?一个概念,毁掉了无数系统
Site Owner
Published on 2026-05-24
内聚性决定了代码能活多久。功能聚合、顺序聚合、通信聚合、时间聚合、逻辑聚合、偶然聚合——这七种内聚级别,划定了你的代码是能改还是只能重写。AI时代,内聚问题比以往更严峻。

为什么你的代码迟早会崩成"意大利面"?一个概念,毁掉了无数系统
一个在Hacker News上被点了上千赞的评论这样说:
"大语言模型很擅长写代码,但在软件工程上表现很差……我正在修复一个靠氛围编程写出来的应用,单个功能看着还行,但整体就是一团意大利面条式的烂摊子。"
说这话的是一个50岁的老程序员。而让他如此痛心的,不是别人的代码,是他自己的——他用了四十年积累的经验,居然在AI时代眼睁睁看着代码质量崩塌。
问题出在哪?
不是AI不行。是你压根没搞懂一个叫"内聚"的东西。
代码为什么会长成"意大利面条"
你有没有过这种经历:
接手一个老项目,打开一看,所有函数都堆在一个文件里。你想改一个打印功能,结果把数据计算也给搞崩了。改完之后测试,发现另一个完全不相干的功能出问题了。
这不是你技术不行。这是代码的"内聚性"太差。
所谓内聚,衡量的是一个模块内部各个元素结合得有多紧密。理想状态是:一个模块只做一件事,这件事做得漂亮极了。但现实往往是——一个模块里塞了一堆八竿子打不着的东西,堆上去的唯一原因是"当时懒得再建一个文件"。
举个具体的。
// 典型的低内聚代码
function initSystem() {
// 时间聚合:这些操作唯一的共同点就是需要在启动时执行
connectDatabase(); // 连接数据库
loadConfig(); // 加载配置
sendWelcomeEmail(); // 发欢迎邮件
startScheduler(); // 启动定时器
initializeLogger(); // 初始化日志
}
这个函数里干的事没有一件跟另一件有关系。它们唯一的共同点是"系统启动时需要跑一遍"。这种内聚叫时间聚合,属于内聚级别里比较差的那种。
再比如:
// 逻辑聚合:把一堆不相干的东西因为"逻辑上差不多"塞一起
function handleData(data, type) {
if (type === 'user') {
validateUser(data);
saveToUsersTable(data);
sendNotification(data);
} else if (type === ) {
(data);
(data);
(data);
}
}