类人软件架构(HOA)

50 阅读4分钟

长久以来,我们都在尝试找到一种架构,能够解决代码长久发展、维护的难题。

无论是分层架构、还是整洁架构都是不错的选择,但其发展年限相对于人的发展年限是渺小的,为什么我们不套用人来解决软件系统架构呢?

如果把软件系统当成一个人:类人软件架构(HOA)的思考

很多系统不是“写崩的”,而是“活成了没人敢动的样子”。

如果你维护过一个三年以上的系统,大概率会有这种感觉:

  • 功能还能跑
  • Bug 也能修
  • 但一改核心逻辑,所有人都开始紧张

我们尝试过分层架构、整洁架构、DDD,但问题依然反复出现。

于是我开始思考一个问题:

为什么我们的软件系统,始终不像一个“生命体”?


一、问题不在技术,而在“理解系统的方式”

传统架构大多从技术视角出发:

  • Controller / Service / Repository
  • UI / Domain / Infrastructure

这些划分在“刚开始”时都很优雅,但随着时间推移:

  • Controller 变成了上帝
  • Service 里堆满业务
  • 状态到处流动
  • 边界逐渐消失

问题的根源,并不在于这些架构本身不好,而在于:

它们对人的直觉不够友好。


二、一个反直觉但自然的想法:把系统当成一个“人”

人类是我们已知的最成功的复杂系统之一:

  • 结构清晰
  • 分工明确
  • 能处理异常
  • 能长期演化

那如果:

我们不再从“分层”出发,而是直接把软件系统当成一个人,会发生什么?

这就是 类人软件架构(Human-Oriented Architecture, HOA) 的起点。


三、系统即人,模块即器官

在 HOA 中:

一个软件系统 = 一个完整的人

这个“人”是封闭的、安全的,外界不能随意触碰其内部。

器官与架构的映射

人体器官架构角色职责
皮肤UI / 表现层用户交互与反馈
骨头骨架结构稳定结构、占位
嘴巴接口层接收输入、协议转换
用例层表达用户意图、编排流程
业务核心业务规则与计算
状态与决策中心全局状态、复杂判断
下丘脑调度中枢流程编排与指令下发
错误处理系统异常过滤、自愈
血管数据通道数据与事件流动

这种映射不是比喻玩笑,而是强约束的职责划分


四、一次用户操作,在“人体系统”中是如何完成的

以一次普通操作为例:

  1. 用户通过 皮肤(UI) 产生操作
  2. 输入经 嘴巴(接口) 进入系统
  3. 手(用例) 理解用户想做什么
  4. 下丘脑 负责调度流程
  5. 胃(业务核心) 执行业务规则
  6. 更新状态、做出决策
  7. 处理异常与错误
  8. 数据经 血管 返回
  9. 皮肤 展示最终结果

每一步都清晰、可追踪,也不可越权


五、为什么这个模型“不容易写烂”?

HOA 天然规避了一些常见反模式:

  • ❌ Controller 写业务逻辑(嘴巴不能思考)
  • ❌ Service 变上帝(胃只负责消化)
  • ❌ 全局 try-catch(错误有肾)
  • ❌ 状态满天飞(只有脑能统一决策)

当你用“人体”去审视代码时,很多坏味道会本能地让人不适


六、它和 Clean Architecture / DDD 是什么关系?

HOA 并不是要取代这些成熟架构。

更准确地说:

Clean Architecture 告诉你“代码怎么分”, HOA 帮你理解“系统应该长成什么样”。

它是一种更高层次的架构认知模型(Mental Model)


七、适合与不适合的场景

适合:

  • 长期演进的大型系统
  • 前端复杂状态系统
  • 数据密集、强编排场景

不适合:

  • 一次性脚本
  • 极小型 Demo
  • 对架构约束要求不高的项目

八、写在最后

好的架构,不是看起来聪明,而是像生命一样自然。

类人软件架构不是银弹,也不是框架。

它只是尝试用人类最熟悉的系统——我们自己, 帮助我们在软件复杂度面前,保持清醒与克制。

如果它能让你在写代码时,多一次“这像不像一个健康的人”的自问, 那它的目的就达到了。