Skip to content

面向AI的架构设计:是否还需要三层架构模式?

本章是一个讨论,目的是引出我们对"AI 时代架构设计该往哪走"的思考。我们不是要否定三层架构,而是重新审视:当 AI 成为代码的主要读者和写作者时,哪些设计假设需要调整?


三层架构为什么流行

三层架构(Controller → Service → DAO)是过去二十年最主流的后端架构模式。它的流行不是因为"技术最优",而是因为管理最优

表现层(Controller)→ 接收请求、参数校验、返回响应
业务层(Service)   → 业务逻辑编排、事务管理
数据层(DAO)      → 数据库访问、ORM 映射

从 2000 年代初的 J2EE 时期开始普及,历经 Struts、Spring、Spring Boot,到今天仍然是绝大多数 Java 项目的标配。

面向"人"的设计

三层架构的核心是认知分治——一个人无法同时理解所有代码,所以按"关注点分离"拆成不同层次。这是 1970 年代结构化编程以来最成功的软件工程思想。

具体来说,它解决的是"人的管理问题":

标准化分工

每层有明确的职责边界,团队可以按层分配人员:

  • 前端开发只看 Controller 层
  • 后端开发只看 Service 层
  • 数据开发只看 DAO 层

工业流水线

像工厂流水线一样,每一道工序标准化:

  • Controller:校验 → 调用 → 返回
  • Service:事务 → 编排 → 转换
  • DAO:封装 → 映射 → 执行

好维护

  • 改业务逻辑不用动数据库代码
  • 换数据库不用动业务逻辑
  • 加接口只需要在 Controller 层加一个方法

规范即契约

接口定义就是团队之间的契约。Service 接口声明了"我能做什么",VO/DTO 定义了"数据长什么样"——团队成员之间靠这些规范沟通。

**一句话总结:三层架构是为"人"设计的,核心目标是让代码好读、好管、好分工。

三层架构与 AI 三大挑战


AI 时代的三大挑战

当 AI 开始承担编码工作,三层架构的很多设计假设需要重新审视。我们来看三个关键挑战。

挑战一:规则多

三层架构有大量隐式和显式规则:

命名规则

  • Controller 必须叫 XxxController
  • Service 必须叫 XxxService / XxxServiceImpl
  • Mapper 必须叫 XxxMapper
  • 查询用 selectXxxList,新增用 insertXxx,修改用 updateXxx

分层规则

  • Controller 不能直接调用 DAO
  • Service 之间能否互相调用?要看团队约定
  • DTO 不能传到前端,要用 VO 转换

目录规则

  • 每层有对应的包路径
  • Mapper XML 有固定的存放位置
  • 配置文件有固定的命名和路径

这些规则的目的是"让人的协作更规范"。但对 AI 来说,每一条规则都是额外的约束条件,需要在生成代码时逐一满足。规则越多,AI 需要同时"记住"的条件就越多,出错的维度也越多。

挑战二:规则细

不仅是规则多,每条规则还特别细:

字段级别

  • createTime 必须加 @JsonFormat 注解
  • status 必须用 @NotBlank 校验
  • 分页参数必须继承 PageParam 基类

方法级别

  • 查询方法必须返回 AjaxResult
  • 列表查询必须支持分页
  • 新增方法必须返回自增 ID

文件级别

  • XML 的 namespace 必须指向 Mapper 接口
  • 每个 Mapper XML 需要包含 ResultMap 定义
  • Entity 需要用 @TableName 指明数据库表名

对开发者来说,这些细规则是"肌肉记忆"。但在 AI 眼里,它们就是一组必须精确匹配的约束条件——需要在每一个字段、每一个方法、每一个文件上逐一满足。任何一个不满足,代码就无法通过编译。

挑战三:文件多

这是最直观的问题。以项目为例,一个简单的 CRUD 请求涉及的代码文件:

前端请求
  → Controller(接收参数、校验)
    → VO(视图层对象)
      → Service 接口(声明方法)
        → ServiceImpl(业务逻辑)
          → DTO(数据传输对象)
            → Mapper(数据访问接口)
              → Mapper XML(SQL)
                → Entity(数据实体)
                  → 数据库

涉及的 Java 类:7+ 个文件

实际业务逻辑行数:通常只占 20%

Boilerplate 代码(import / 注解 / getter/setter / 转换):占 80%

CRUD 请求文件链路

为什么这些对 AI 不友好

规则多 → 约束爆炸

对人来说,"默认遵守规则"是自然而然的事。对 AI 来说,每条规则都是一个需要精确执行的指令。

AI 在生成代码时需要同时满足所有规则。规则多到一定程度,AI 生成高质量代码的概率会急剧下降。更隐性的问题是——AI 通常不会主动告诉你"规则太多了我搞不定",而是默默试错,直到你把所有约束都喂给它。

规则细 → 细节陷阱

人靠肌肉记忆可以忽略这些细节,但 AI 没有肌肉记忆,它需要在每一次生成时重新计算。

细规则意味着 AI 需要在大量字段和方法上做精细决策。每个注解、每个参数类型、每个返回值,都必须精确匹配。这种"点状约束"密度越高,AI 遗漏或打错的可能性就越大。

文件多 → 上下文碎片化

文件拆分对人是"关注点分离",对 AI 是"信息撕裂"。

  • AI 需要跨 7 个文件拼接信息才能理解一个完整的请求处理流程
  • 每个文件有大量 import 声明和注解,占用了宝贵的上下文窗口
  • VO/DTO/Entity 之间的转换逻辑分散在各处,AI 需要跟踪多个映射关系
  • 任何一个文件缺失上下文,AI 就会"猜"错

这不是否定三层架构

三层架构没有"错"。在团队协作为主的时期,它的价值无可替代。但如果答案是它们主要是为"人"而设的,那么在 AI 时代,我们需要诚实面对一个问题:

这些层次、规则、文件,到底是为了「质量」而设,还是为了「人」而设?

如果规则是为了"防止人犯错",那么当 AI 不会犯"人的错误"时,这些规则是否仍然是必要的?如果文件拆分是为了"让每个人只关心自己那一块",那么当 AI 可以同时理解全局时,这种拆分是否反而成了障碍?

这些问题没有标准答案。但它们是我们在后续章节中探讨"面向 AI 的架构设计"的起点。


本章小结

维度设计初衷(面向人)AI 时代的实际效果
规则多规范协作,降低沟通成本每多一条规则,AI 多一个出错维度
规则细统一细节,减少理解偏差点状约束密集,AI 容易遗漏
文件多关注点分离,认知分治碎片化增加 AI 上下文切换成本
层次隔离每层独立变化,降低耦合改一个字段要同步多处

关联:本章提出了 AI 时代架构设计的核心矛盾——"面向人的规则体系"与"面向 AI 的效率需求"之间的冲突。下一章我们将具体看一个 Java 项目的改造过程。