全部文章
Thinking Thinking 架构

对系统架构思维的初步理解

在AI编程的时代,最重要的反而不是形而下的某个功能模块的实现,甚至是技术栈以至于某个技术,而是更加形而上的架构思维上的架构思维

更新于 2026年5月20日 2,916 字 约 7 分钟
THINKING 对系统架构思维的初 步理解 Thinking · 架构 § 04
阅读进度 0% 继续阅读

现在感觉系统架构思维是越发的重要了,随着AI的发展,想要做一个应用的难度是真的大打折扣了,甚至随便一个人加上claude opus4.7或者gpt5.5都能做一个以前需要全栈开发才能做出的应用。

 

但这里有一个非常关键的点:

AI从某种程度上只是让功能的实现变得容易了,AI很擅长做局部的功能,比如一个登录功能等。 但AI只是让功能变得廉价了而已,如果要让产品真正成立的话需要架构。

 

一个应用里面往往是很多个功能的集合,这些功能又会存在很多的关系,甚至于很多的流程在一起相互交错,如果只是让AI一个个做功能的话,很容易一个错误带崩一片,最后写出来的东西问题也会比较多,比如:

1.功能各写各的
2.数据模型前后不一致
3.本来可以封装成一个函数的东西重复写了好几次
4.权限边界不清晰
5.一个改动带崩一片

有些人会说模块化编程能减少很多问题,其实我原本也这么一位,但模块化从某种程度上来说也只是在代码层面把东西拆开,还是在形而下的代码层。

没有架构约束的模块化,也只是把混乱拆开了而已,从局部看也许不是很乱,但无法改变整体的乱。

 

所以问题来了,如何让AI写出更加符合实际业务的程序呢,需要框架的约束。如果说go,tauri,rust,postgresql,ACP协议这些是技术以及技术栈,那技术和技术栈它属于一种形而下的比较好把握的东西,某个具体功能也是一样。但架构属于那种形而上,需要把一个业务抽象成一个个系统,以及一些核心对象,是一个比较抽象的东西,但我们需要用形而上的架构去约束形而下的技术。

 

AI擅长实现局部功能,但真实应用不是功能堆叠,而是由对象、流程、状态、规则、数据和反馈机制组成的系统。架构在这个时代最大的价值,就是用业务结构去约束AI的局部实现,让每个功能都长在正确的位置上。

一.什么是架构

从定义上,架构是面对复杂需求时,对系统边界;模块关系;数据流;控制流;约束;演化路径做出的关键决策集合。其实我一开始看到这个定义的时候是有点懵的,系统边界是什么,控制流,演化路径又是什么?

但后来我发现,其实不用吧这些词想的太复杂,先抓住一个核心:

架构不是先问某个功能怎么写,而是先问这个系统如何成立。

先搞清楚架构回答的是什么问题:

  1. 这个系统负责什么,不负责什么
  2. 这个系统里面有什么核心对象
  3. 这些对象之间是什么关系
  4. 数据从哪来又到哪里去
  5. 谁来调度,谁来决定下一步
  6. 哪些规则不能破坏
  7. 未来系统变复杂时,应该朝着什么地方扩展

这些问题听起来很抽象,但它们决定了一个系统未来长什么样,是否能够拥有生命力。

但从根本的角度,或者说架构设计的目的,这里分两种,一种是系统架构,一种是产品架构,产品架构更偏向于用户角度,系统架构更偏向于功能。

1.1 产品架构

产品架构关注的是产品的能力如何组织,产品价值如何成立,用户路径如何闭环。

比如一个学习产品,用户是不是能从不知道学什么,走到“知道目标、获得路径、持续练习、得到反馈、复盘巩固”

1.2 系统架构

系统架构更偏向工程和业务实现,关注为了支撑这些产品的能力,系统内部如何分工,写作,约束和演化。

比如学习者画像模块,知识点模块,推荐模块,测评模块,复盘模块怎么通信,数据由谁拥有,状态由谁改变,哪些行为必须被记录。

并且系统架构往往会有好几种方案,能够说明为什么方案A比方案B要好也是个很重要的能力,并且这往往需要一些更底层的理解。

二.架构应该从需求中来

从需求推导出系统的架构是一个比较重要的能力,我之前做开发往往是在堆砌模块,比如说如果用户的需求是做一个AI学习助手,那我可能会堆上AI答疑,智能路径规划,PDF上传解析,错题本,每日打卡,积分系统,积分商店,社区系统…,但很容易就变成这些功能之间没有稳定的结构或者关系,最后变成了一堆杂烩,每个模块各做各的。

但如果是架构思维的话,往往不会先考虑后端用java还是go,用postgresql还是mysql,用qdrant还是chromdb,而是先分析用户的需求是什么。

用户真正想解决什么问题?

比如用户的需求是我想学的更好,这个例子可能比较宽泛了,甚至可以说是一个很差的prompt,但是可以试着从里面猜一下用户真正的痛点是什么:

1.不知道自己应该学哪些东西
2.不知道自己适合什么样的学习方法
3.学完没有反馈,或者说缺乏正反馈
4.今天学一点,明天忘一点,没有内化形成自己的一套东西
5.不知道哪些课程,文章,资料适合自己

所以用户要的不是一个有社区,有积分系统,有AI答疑的机器人

而是一个可以真正帮助自己解决缺乏正反馈,规划学习路径,推荐学习资源,复盘巩固,个性化的个人操作系统。

这时候系统的核心就不是一个简单的聊天框,而是一个学习闭环

诊断
  ↓
规划
  ↓
学习
  ↓
练习
  ↓
测评
  ↓
反馈
  ↓
复盘
  ↓
调整路径

接着就可以去推导系统应该具有哪些能力

1.个人画像描绘能力
2.遗忘曲线管理能力
3.反馈调整能力
4.资源推荐能力
5.复盘沉淀能力
...

所以功能不是凭空堆出来的,而是从业务闭环中长出来的。

三.什么是系统思维呢

在开发一个产品时,我们可以把一个业务场景看成一个系统,不止是功能的简单集合,而是一定边界内,由多个对象、关系、规则、流程和反馈机制共同组成,用来完成某个目标的整体。

系统思维相当于一个整体论的方法,不是把业务拆成很多功能,而是识别一个业务场景中的核心对象、关系、事件、状态和规则。

比如说:

  1. 这个场景有哪些长期存在的对象
  2. 对象之间有什么关系
  3. 事情如何流动
  4. 状态如何变化
  5. 哪些规则不能被破坏
  6. 异常情况下系统应该如何处理

或者我觉得这个方法有点像第一性原理,先把事物拆到基本的主要构成部分,但系统思维不止是拆分,更强调对象之间如何连接、事件如何流动、状态如何变化,以及这些东西组合起来会涌现

比如说一个外面平台,如果只看功能的话,我们会看到:

搜索店铺
浏览菜品
加入购物车
下单
支付
配送
评价

但使用系统思维,我们就能超出功能,看到更底层的对象与对象之间的关系。

在整体论中有一个思想是:整体大于部分之和,而整体大于部分之和的那个部分就叫做涌现。

怎么理解呢,比如单独一个神经元是没有意识的,但几百亿个神经元组合在一起就能够形成意识。那在什么时候会出现涌现,组成的部分足够多,且组成部分的联系足够多的时候。

通过系统思维尝试看清这个外卖形态的组成部分之间的联系,我们就能够看到如下内容。

用户创建订单
订单包含彩票
订单绑定商家
订单触发支付
订单进入配送
配送分配骑手
订单完成后产生评价
异常情况下订单可能会退款,取消,超时或投诉

所以可以得到外卖系统的核心对象清单有

  • 用户
  • 商家
  • 菜品
  • 订单
  • 支付
  • 骑手
  • 评价
  • 退款
  • 投诉

其中可以判断出最为关键的其实是订单,因为订单把用户,商家,菜品,支付,配送,评价都连接了起来

功能思维看到的是:

我要做下单功能

系统思维看到的是:

订单是连接用户,商家,支付,配送,评价的核心对象,下单功能只是生命周期中的一个阶段

当然不只是对象,还有事件

当然这里就可以联系到DDD也就是Domain-Driven design领域驱动设计

四.DDD(Domain-Driven design领域驱动设计)

DDD 的核心不是某个框架,也不是某种固定代码结构,而是让软件系统尽可能贴近业务本身。它要求我们不要一上来就思考数据库表、接口、页面和技术栈,而是先建立一套业务语言。

从字义看,领域驱动的设计,要求你对产品涉及到的领域的业务足够的了解,从这个领域的业务来推动产品的设计。

领域驱动设计的第一步一般就是把角色,对象和事件例举出来,而这个把事件例举出来的过程也叫做事件风暴

有些人会比较疑惑,事件风暴不就是把事件一个个例举出来吗?

其实如果更准确的说,DDD不是简单的列举角色、对象和事件,而是通过业务语言建立领域模型。事件风暴是DDD中常用的一种建模方法,通过梳理发生了什么事件,来帮助我们发现业务对象、状态变化、规则,命令和边界。

比如在外卖系统里,我们不要一开始就说:

order_table
payment_service
delivery_controller

这些是技术我们应该先说:

用户创建订单。
订单包含菜品。
订单需要支付。
支付成功后订单进入待配送。
配送系统分配骑手。
骑手接单后开始配送。
订单送达后进入已完成状态。
订单完成后用户可以评价。
异常情况下订单可以取消、退款、投诉。

这些句子看起来很普通,但它们其实已经描述了系统骨架。

其中有:

  • 角色:用户、商家、骑手、平台管理员。
  • 对象:订单、菜品、支付、配送、评价、退款、投诉。
  • 命令:创建订单、支付订单、取消订单、申请退款、分配骑手、提交评价。
  • 事件:订单已创建、支付已完成、骑手已接单、订单已送达、退款已发起。
  • 状态:待支付、待配送、配送中、已完成、已取消、退款中、已退款。
  • 规则:未支付的订单不能配送,已完成的订单不能随意取消,退款需要满足条件。
  • 边界:支付系统不应该直接修改评价,评价系统也不应该直接修改配送状态。

这就是 DDD 对 AI 编程特别重要的地方。

AI 很容易写出一个“能跑”的功能,但它不一定知道这个功能在业务世界里的位置。

如果你只对 AI 说:

帮我写一个订单接口。

它很可能直接生成一套 CRUD:新增订单、删除订单、修改订单、查询订单。

但真实业务里的订单不是一个普通数据表。订单有生命周期,有状态流转,有权限限制,有异常处理,有和支付、配送、评价、退款之间的关系。

所以更好的提示方式是:

订单是外卖系统的核心聚合。它有创建、支付、取消、配送、完成、退款等状态。订单状态只能通过明确的业务命令和业务事件改变。支付系统只能触发支付成功事件,配送系统只能触发配送状态事件,评价系统只能在订单完成后创建评价。任何模块都不能绕过订单生命周期直接修改订单状态。

DDD 的价值,不是让代码变复杂,而是让系统拥有稳定的业务骨架。

 

 

目录