软件中的一切都是金字塔(不管你喜欢与否)

发布: (2025年12月24日 GMT+8 11:29)
4 min read
原文: Dev.to

Source: Dev.to

引言

一段时间后,软件不再像工具。
它开始像重力。
无论你构建什么,复杂度总会向下沉。
我并没有刻意设计这个模型;我只是不断在各处看到相同的形状,于是我不再给模式命名,而是开始画金字塔。

框架

框架看起来很强大,直到你看到它们所处的位置:

  • 框架
  • 运行时环境
  • 编程语言
  • 编译器或解释器
  • 机器码

框架并没有赋予计算机新的能力。它们的存在是为了提升开发者体验,就像 UI 为用户体验服务一样。当一切运行顺利时,你就在顶层。你永远不会通过添加另一层抽象来调试。

架构

人们认为架构在团队规模扩大时才开始。其实并不是。
一个单独的 MVC 应用已经形成了金字塔:

  • 易变性位于顶部。
  • 控制器翻译意图。

如果业务逻辑向上泄漏,系统会迅速腐烂。这并不是过度工程。

横向扩展

随着系统的增长,常见的错误是横向扩展。人们过早地把复杂度横向扩散。

每个模块:

  • 拥有自己的规则
  • 暴露接口
  • 隐藏内部实现

部署仍然是单调的。当需要扩展时,抽取工作是机械化的。如果抽取过程很痛苦,那说明边界本来就是虚构的。

微服务

微服务并不会消除复杂度;它们把复杂度搬到网络上。每一次网络跳转都是一种故障模式。

  • 微服务解决的是组织层面的规模,而不是早期的不确定性。
  • 它们是通过压力而非野心获得的。
  • 过早使用会让问题的增长速度超过解决速度。

金字塔规则

在所有四个金字塔中,规则从未改变:

将经常变化的东西放在顶部。

框架变化迅速。违背这一顺序并不会让你变得“现代”。这不是哲学,而是可逆性。

  • 层级越高:错误成本越低,重写越容易。
  • 层级越低:成本越高,恢复时间越长。

强大的系统顺应重力。薄弱的系统则用抽象去对抗它。

结论

一旦你看到了金字塔,问题就会改变:

  • 我正在触及哪一层?
  • 这个决定的可逆性如何?
  • 我是否在不该放重物的地方增加了重量?
Back to Blog

相关文章

阅读更多 »

SOLID 再探 — 后模式视角

为什么原则不如背后的力量重要:SOLID 不是一份检查清单,而是对更深层力量的历史压缩。这是系列的第 5 部分。