为什么?
因为好的软件开发本来就应该有乐趣。
当然,不是每一天。
也不是每个项目。
更不是在每一种压力、每一种组织结构、每一种系统里。
但是,当一个系统边界清晰,职责明确,数据流可以理解,业务逻辑有自己的位置,修改不再像赌博一样不可预测时,软件开发会重新变成很多项目早已遗忘的东西:
一门手艺。
不是魔法。
不是英雄主义。
不是半夜救火。
而是一份可以通过经验、谨慎、工具、练习和清晰决策真正做好的职业。
这个网站存在的原因,就是我想为这种软件开发重新争取一点空间。
我不是从纯理论里走出来的。
我在受监管的系统里工作了很多年。在这些环境里,软件不仅要能运行,还必须可理解、可维护、可验证、可负责。
我也长期维护过干净的系统。不是写完上线就走,而是持续演进、稳定、解释、保护,并让它们穿过很多次需求变化之后仍然保持可理解。
一个好的系统,不是在第一次发布时才能看出来。
它要过三年。
五年。
七年。
当人离开了。
当需求变了。
当监管要求增加了。
当团队变大了。
当没人还能完整记得当初为什么这么设计,但系统依然能被理解。
我见过在这样的系统里工作有多么令人愉快。
我也见过相反的情况。
我在很多项目里都做过那个”救火的人”。
在火已经烧起来之后被叫过去。
当每一次修改都让人害怕。
当组件什么都知道。
当服务变成了小型操作系统。
当 Store 什么都做,却没有一件做得真正清楚。
当没人再说得清业务逻辑到底住在哪里。
当系统还在运行,但没人愿意说自己真正理解它。
这些经历塑造了我的视角。
不是因为我觉得自己什么都懂。
而是因为火见得多了,你迟早会开始认真对待防火设计。
为什么要做这个网站?
Section titled “为什么要做这个网站?”因为前端架构经常被低估,或者被神秘化。
对一些人来说,这只是前端。
一点 UI。
一点状态。
一点 API。
一些组件。
总能搞定。
对另一些人来说,架构又变成了抽象的东西。
图表。
原则。
流行词。
Clean 什么什么。
大会演讲。
漂亮概念。
离日常开发很远。
这两种看法都不够。
前端架构不是自我满足。
也不是为了追求漂亮。
它是一系列决策的总和,这些决策决定了一个系统明天是否还能被理解、被修改、被负责。
它决定一个团队是真的能长期保持速度,还是只是在一开始显得很快。
它决定业务逻辑是否仍然可见,还是慢慢渗进组件、服务和 Store 的缝隙里。
它决定新的需求是被集成进系统,还是被硬塞进去。
它决定系统是在成长,还是只是膨胀。
这个网站,是我试图具体谈论这些问题的地方。
不假装中立。
不把话说得圆滑。
不做框架营销。
而是从一个维护过干净系统、也扑灭过燃烧系统的人视角出发。
这里和其他内容有什么不同?
Section titled “这里和其他内容有什么不同?”我不想再做一个重复通用最佳实践的网站。
这样的内容已经够多了。
我想写的是架构在真实项目里到底在哪里失败,又在哪里真正发挥作用。
组件什么时候开始扮演 Use Case。
服务什么时候开始像灰尘一样收集责任。
Store 什么时候开始混合副作用、业务逻辑和 ViewModel。
响应式数据流什么时候被命令式捷径打断。
Microfrontend 什么时候不是解决边界,而是在分发缺失的边界。
受监管系统里,为什么可追溯性不是可选项。
团队为什么明明想要质量,却没有时间把斧头磨利。
但我也想写另一面。
清晰的切分。
好的命名。
小而可理解的上下文。
纵向架构。
业务语言。
带来信心的测试。
真正有帮助的 Store。
不会泄露一切的接口。
不会美化遗留系统、但能让系统继续变化的桥接方案。
我不只是想说什么是坏的。
我想说明它为什么会发生,如何识别它,以及怎样走出来。
架构是一门手艺
Section titled “架构是一门手艺”很多人把软件开发说得像魔法。
它不是。
软件开发很大一部分是手艺。
清晰的切分。
明确的概念。
可重复的决策。
合适的工具。
练习。
纪律。
反馈。
指导。
经验。
以及一种谦逊:不要试图用”聪明”解决每一个问题。
从这个角度看,架构不是象牙塔。
架构是在系统层面对手艺负责。
它不只问:
如何做完这个功能?
它还会问:
这个责任应该放在哪里?
下一次修改会发生什么?
数据流怎样保持可理解?
这里产生了什么依赖?
这个决定以后是否很难撤回?
两年后谁还需要理解这段代码?
这不是慢。
这是专业。
为什么 AI 让这件事更重要?
Section titled “为什么 AI 让这件事更重要?”AI 工具正在改变软件开发。
代码生成得更快。
方案变得更便宜。
原型可以在几分钟内出现。
Agent 可以接任务、改文件、写测试、提出建议,并移动大量代码。
这很强大。
但它不会自动解决架构问题。
恰恰相反。
AI 在清晰的上下文里工作得更好。
小模块。
明确边界。
清楚的责任。
好的命名。
可靠的测试。
可理解的数据流。
明确的架构规则。
记录过的决策。
这些不仅是传统意义上的质量特征。
它们也是 AI 辅助开发不只是更快制造混乱的前提。
一个切分很差的系统,不会因为 Agent 能修改更多文件就变得更容易维护。
如果一切都和一切耦合在一起,AI 也会变得谨慎、不准确,甚至危险。
如果上下文小,边界清晰,AI 就能更好地帮忙:
它能定位修改范围。
它能更有针对性地生成测试。
它能复用模式。
它能遵守规则。
它能解释关联。
它能在一个有限的空间里做有意义的工作。
因此,干净的架构不会变得不重要。
它会变得更重要。
这不是害怕 AI 的手艺人在怀旧。
这是让 AI 工具真正可靠可用的基础。
不是抱怨,而是动力
Section titled “不是抱怨,而是动力”当然,这个网站里会有一些不满。
在软件项目里待得足够久,没人能完全没有不满。
但不满不是核心。
核心是对好软件开发的热爱。
对可以解释的系统。
对不让人意外的代码。
对能保护团队的边界。
对说同一种业务语言的团队。
对带来勇气的测试。
对不挡路、反而让变化成为可能的架构。
我写这个网站,不是因为我讨厌前端。
我写它,是因为我喜欢好的前端。
认真对待业务的前端。
不仅能运行,而且能承载变化的前端。
不会在每次修改时都假装这是人类第一次发现软件会增长的前端。
这个网站想做什么?
Section titled “这个网站想做什么?”这个网站想让模式变得可见。
它想解释,为什么好的意图经常会产生坏的系统。
它想指出 Anti-Pattern,但不把人简单地贬低。
它想拆穿神话,但不建立新的教条。
它想让架构决策可以比较。
它想说明什么时候简单方案足够,什么时候所谓的简单只是逃避。
它想展示桥接方案:当完美切分太贵、太晚或不现实的时候,怎样仍然让系统继续变得更好。
不是每个项目都需要 DDD。
不是每个团队都需要 Microfrontend。
不是每个应用都需要 Store。
不是每个问题都值得上一个框架。
但每个系统都需要清楚知道:
责任在哪里,
数据如何流动,
业务逻辑住在哪里,
哪些边界必须被保护,
哪些捷径以后会变成账单。
这个网站不是什么?
Section titled “这个网站不是什么?”这不是开发者批判大会。
好的开发者很有价值。
好的 Senior Developer 更是如此。
但一个好的开发者,不会自动成为架构师。不是因为他能力不够,而是因为架构需要另一种视角。
开发者构建解决方案。
架构师还要问:这个问题是否被正确切分了?
开发者关注代码质量。
架构师还要关注可变更性、耦合、责任、风险、边界,以及决策的长期成本。
两者都需要。
这个网站也不是工具评测集合。
不是框架崇拜。
不是架构民俗学。
也不是”所有东西都必须 Clean”的表演。
它是一组来自真实项目的态度、Pattern、Anti-Pattern 和现场记录。
有些学得太晚。
有些是在压力下学到的。
有些带着不漂亮但诚实的桥接方案。
但它们都有同一个目标:
下一次,少一点天真。
前端架构不是从文件夹结构开始的。
它从组件停止”什么都知道”的那一刻开始。