跳转到内容

本站所坚持的理念

这是一个讨论前端架构、软件设计和长期可维护性的专业网站。

本站面向希望构建可长期演进的前端系统的开发者和架构师。这里讨论的不只是框架和工具,还包括如何划分职责、数据如何流动,以及业务逻辑应当由系统的哪一部分负责。

好的软件开发本来就应该有乐趣。

当然,并不是每一天、每个项目,也不是在任何压力和系统环境下都能如此。

但是,当一个系统边界合理、职责明确、数据流容易理解、业务逻辑各有归属,修改也不再像赌博一样难以预测时,软件开发会重新展现出许多项目已经淡忘的一面:

它是一门手艺。

不是魔法。
不是英雄主义。
也不是一次又一次地半夜救火。
而是一份可以凭借经验、谨慎、合适的工具和明确的决策认真做好的职业。

我创建这个网站,就是希望为这样的软件开发重新留出一些空间。

我的观点并非只来自理论。

我在受监管的系统中工作了很多年。在这些环境里,软件不仅要能够运行,还必须易于理解、维护和验证;其中的决策要可以追溯,职责归属必须明确,后续修改也必须经得起审查。

我也长期维护过结构清楚、职责明确的软件系统。我不只是把它们开发出来再交付,而是持续改进和稳定它们,向他人解释并捍卫其中的设计,让它们经历多次需求变化后仍然可以被人理解。

一个系统是否优秀,通常无法从第一次发布看出来。

要看三年之后。
五年之后。
七年之后。
当有人离开。
当需求改变。
当新的监管要求出现。
当团队扩大。
当已经没人完整记得当初为什么这样设计,系统却依然能够被理解。

我体验过在这样的系统中工作有多么愉快。

我也经历过完全相反的情况。

在不少项目里,我都做过“救火的人”。
总是在问题已经失控时才被叫来。
每一次修改都让人担心。
组件掌握了所有信息。
服务承担了过多职责,逐渐控制整个流程,像一套藏在系统里的小型操作系统。
Store 什么都包揽,却没有把任何一项职责处理清楚。
没人说得清业务逻辑究竟由系统的哪一部分负责。
系统虽然还在运行,却没人愿意声称自己真正理解它。

这些经历塑造了我的视角。

不是因为我认为自己什么都懂。
而是因为处理过足够多的严重问题之后,人自然会开始重视如何提前避免它们。

因为前端架构经常被低估,也经常被神秘化。

对一些人来说,这只是前端。

一点 UI。
一点状态。
一点 API。
一些组件。
总能搞定。

对另一些人来说,架构又成了脱离日常开发的抽象概念。

图表。
原则。
流行词。
各种冠以“Clean”之名的方法。
大会演讲。
听起来漂亮、却很少落到日常工作的概念。

这两种看法都不够。

前端架构不是为了架构本身。
也不是为了追求漂亮。

它是一系列架构决策的总和。这些决策决定了一个系统在未来是否仍然易于理解和修改,也决定了每项职责和每次变更是否仍然有明确的承担者。

它决定一个团队是真的能长期保持速度,还是只是在一开始显得很快。
它决定业务逻辑是否仍然清楚可见,还是逐渐散落在组件、服务和 Store 之间。
它决定新的需求是被集成进系统,还是被硬塞进去。
它决定系统是在成长,还是只是膨胀。

这个网站就是我具体讨论这些问题的地方。

不假装中立。
不把话说得圆滑。
不做框架营销。
而是从一个长期维护过结构良好的系统、也处理过失控系统的人视角出发。

我不想再做一个重复通用最佳实践的网站。

这样的内容已经够多了。

我想写的是:在真实项目中,架构究竟会在哪里失效,又会在哪里真正发挥作用。

组件什么时候开始承担本应属于 Use Case 的职责。
服务什么时候不断聚集职责,最终变得无所不管。
Store 什么时候把副作用、业务逻辑和 ViewModel 混在一起。
响应式数据流什么时候被命令式捷径打断。
微前端(Microfrontend)什么时候没有解决边界问题,反而把原本就缺失的边界扩散到更多地方。
为什么在受监管的系统中,可追溯性从来不是可选项。
为什么团队明明重视质量,却没有时间改进自己的工具和工作方式。

但我也想写另一面。

合理的切分。
好的命名。
范围小、容易理解的上下文。
纵向架构。
业务语言。
带来信心的测试。
真正有帮助的 Store。
不会暴露所有内部细节的接口。
不粉饰遗留系统、却能让它继续演进的桥接方案。

我不只是想说什么是坏的。

我想说明它为什么会发生,如何识别它,以及怎样走出来。

很多人把软件开发说得像一种魔法。

它不是。

软件开发很大一部分是手艺。

合理的切分。
明确的概念。
可重复的决策。
合适的工具。
练习。
纪律。
反馈。
指导。
经验。
以及一种谦逊:不要试图只靠“聪明”解决每一个问题。

从这个角度看,架构不是象牙塔。

架构意味着在系统层面对这门手艺负责。

它不只问:

如何做完这个功能?

它还会问:

这项职责应该由哪一部分承担?
下一次修改会发生什么?
数据流怎样保持可理解?
这里产生了什么依赖?
这个架构决策以后是否很难撤回?
两年后谁还需要理解这段代码?

这不是慢。

这是专业。

AI 工具正在改变软件开发。

代码生成得更快。
方案变得更便宜。
原型可以在几分钟内出现。
Agent 可以接任务、改文件、写测试、提出建议,并移动大量代码。

这很强大。

但它不会自动解决架构问题。

恰恰相反。

AI 在边界明确、信息完整的上下文中工作得更好。

小模块。
明确的边界。
清楚的职责。
好的命名。
可靠的测试。
可理解的数据流。
明确的架构规则。
有记录的架构决策。

这些不仅是传统意义上的质量特征。

它们也是避免 AI 辅助开发只会更快制造混乱的前提。

一个结构混乱、边界不清的系统,不会因为 Agent 能修改更多文件就变得更容易维护。

如果系统中的各个部分彼此纠缠,AI 也会变得谨慎、不准确,甚至危险。

如果上下文范围有限、边界明确,AI 就能更好地提供帮助:

它能定位修改范围。
它能更有针对性地生成测试。
它能复用架构模式。
它能遵守规则。
它能解释关联。
它能在一个范围明确的空间里做有意义的工作。

因此,结构良好的架构不会变得不重要。

它会变得更重要。

这不是出于对 AI 的恐惧,也不是专业开发者对过去的怀念。

这是让 AI 工具真正可靠可用的基础。

当然,这个网站里会有一些不满。

在软件项目里待得足够久,没人能完全没有不满。

但不满不是核心。

核心是对好软件开发的热爱。

对可以向人解释清楚的系统。
对不让人意外的代码。
对能够保护系统和团队的边界。
对说同一种业务语言的团队。
对带来勇气的测试。
对不挡路、反而让变化成为可能的架构。

我写这个网站,不是因为我讨厌前端。

我写它,是因为我喜欢好的前端。

认真对待业务逻辑的前端。
不仅能运行,而且能承载变化的前端。
不会在每次修改时都像是第一次面对软件需要成长这个事实的前端。

这个网站希望让软件中的架构模式和架构决策变得清楚可见。

它想解释,为什么好的意图经常会产生坏的系统。
它想指出 Anti-Pattern,但不因此笼统地贬低开发者。
它想拆穿神话,但不建立新的教条。
它想让不同的架构决策能够被比较。
它想说明什么时候简单方案足够,什么时候所谓的简单只是逃避。
它想展示可行的桥接方案:当完美的切分成本过高、为时已晚或并不现实的时候,怎样仍然让系统继续改善。

不是每个项目都需要 DDD。
不是每个团队都需要微前端。
不是每个应用都需要 Store。
不是每个问题都值得上一个框架。

但每个系统都必须明确:

各项职责由谁承担,
数据如何流动,
业务逻辑由系统的哪一部分负责,
哪些边界必须被保护,
哪些捷径会在日后带来额外成本。

这不是一个批判开发者的网站。

好的开发者很有价值。
好的 Senior Developer 更是如此。

但一个优秀的开发者并不会自动成为架构师。这并不是因为能力不足,而是因为架构要求另一种观察系统的视角。

开发者构建解决方案。

架构师还会问:这个问题是否被合理地切分了?

开发者关注代码质量。

架构师还要关注可变更性、耦合、职责、风险、边界,以及架构决策的长期成本。

两者都需要。

这个网站也不是工具评测集合。
不是框架崇拜。
不是架构民俗学。
也不是一场“所有东西都必须 Clean”的表演。

它收集了来自真实项目的立场、架构模式(Pattern)、Anti-Pattern 和项目实录。

有些学得太晚。
有些是在压力下学到的。
有些伴随着并不漂亮、但诚实可行的桥接方案。
但它们都有同一个目标:

下一次,少一点天真。

前端架构不是从文件夹结构开始的。

它始于组件不再承担所有职责的那一刻。