ATRIMUT 标志
ATRIMUT 精准技术,可靠成果
代码哲学

从零重写项目:为什么领域模型比技术更重要

写完第一篇文章,我总觉得还有些话没说完。我没有要求把它重写一遍——那恰好违背了我想表达的意思——于是决定再写一篇,谈谈对新技术的追逐。

一辆正在变成南瓜的马车,旁边桌上的纸张画着数据模型示意图

“我们把它全部重写吧”

在第一篇文章中,我写过,程序先写在纸上。这次要谈的是:跳过纸上的功夫,却一心想把一切“换个新做法”,会发生什么。

只要做过几年软件开发,对这个场景大概都不陌生。一支新团队接手项目,了解了一下系统,很快就会有人说:“我们把它全部重写吧。”

当然,提议采用的一定是最时髦的技术。上个世纪,人们从书里读到它;今天,更多是在某次培训课上见过,或者在上一家公司用过——看样子,用完之后就不得不换工作了。

至于系统究竟做什么、为什么这样设计、这张表为什么要关联那张表,这些问题却很少有人问。没有人往根上看。

跟上趋势,但别陷入竞赛

先说明一下,免得有人把我归为守旧派:关注技术趋势、更新依赖库、适时更换技术,都是必要而且正确的。多年不更新的代码同样有风险:安全漏洞、熟悉它的人陆续离开,以及与运行环境不再兼容。

但凡事都要讲理性。升级是手段,目标是让系统正常运转,解决业务问题。

漂亮的外壳,空空的内里

如果不理解业务领域,最多只能用新技术搭出一个漂亮的壳:响应迅速的界面、现代化的构建流程、整齐的组件。

一切看起来都很好,直到需要把真正的功能放进去:业务核算、计算逻辑、例外情况,以及旧系统多年积累下来的规则。问题就从这里开始接连出现。不是因为技术不好,而是因为根本没有弄清楚,自己究竟在开发什么。

准时变回南瓜

还有第二个不那么显眼的问题。过几年,新技术就不再新了,用它写的代码也会像童话里的马车一样变回南瓜——成为遗留代码。就像眼前这套旧代码,几年前也曾站在潮流最前沿。

于是循环形成了:今天把旧的重写成新的,过几年新的变成旧的,下一支团队来了,又有人说:“我们把它全部重写吧。”

时间和资金花在更换包装上,系统的本质却没有因此变得更好,也没有变得更清楚。

留下来的,是模型

而真正不会轻易消失的,是模型:作为应用基础、经过认真设计的领域数学模型。实体、关系、规则、约束。这些东西可以几十年都不发生根本变化。

举个简单的例子:会计。复式记账、借方和贷方、会计科目表。这个模型比任何计算机都古老。其间,会计系统经历了穿孔卡片、大型机、桌面软件、Web 和云。技术换过很多轮,模型却延续了下来。

安德烈·彼得罗维奇·叶尔绍夫院士早在1981年的报告《编程——第二种读写能力》中就谈过这个问题。他写道,书籍和计算机都是外部世界信息模型的载体,而将这一模型以程序形式具体实现的需要,既要求、也使人类能够显著提升自身的智力能力(A. P. 叶尔绍夫,虚拟计算机博物馆,俄文)。这里的关键词,是模型。程序只是将它具体实现出来。

AI 带来了什么

现在,我们有了 AI。现代 AI 助手——比如出色的 Claude——掌握新技术的速度比我们任何人都快。把项目升级到新版框架、迁移到另一套技术栈、重新搭建外壳,它们都很乐意做,而且用的是小时,不是月份。

这里有一个重要的分岔口。

如果基础是清楚描述的架构和正确的领域模型,那么从一种技术迁移到另一种技术,会比过去任何时候都更快、更容易。AI 可以依据模型,把它迁移到新的技术基础上。这才是真正的收益。

如果没有模型,AI 也会同样乐意把所有概念上的错误搬到各种现代技术上。迅速、自信,而且不多问一句。原先存在于旧系统里的错误,现在会存在于新系统里——只是看起来更现代了。

有了 AI,也不能省掉变更日志

由此可以得出一个常被忽略的结论:AI 的帮助,并不意味着开发者可以不再维护两份必要的文档。恰恰相反,它让这些文档更加重要。

第一份,是变更日志(changelog):改了什么、在哪个版本改的、为什么改。当 AI 参与编写代码时,变更量会成倍增加。没有日志,过一个月,无论是人还是 AI 自己,都很难说清系统为什么变成了现在这样。

第二份,是项目概述(project summary):简明说明这是什么系统、采用什么模型、边界在哪里、做过哪些决策,以及为什么。这是新开发者入职第一天应该阅读的内容,也是请 AI 动手修改之前应该交给它的东西。没有这样的说明,它就会自行补全空白——依据通用模板,而不是你的业务领域。

这并不是什么革命性的想法。源自苏联、至今仍沿用的统一程序文档体系(ЕСПД,ESPD),早在1980年起就规定,程序文档的修改应以变更通知为依据(GOST 19.603-78,俄罗斯联邦技术调节与计量署,俄文)。同一体系下的《程序说明》文档,则包含程序用途、功能限制和逻辑结构说明(GOST 19.402-78,俄罗斯联邦技术调节与计量署,俄文)。说到底,还是变更日志和项目概述,只不过当年写在纸上,还盖着章。工具变了,意义没有变。

先把模型弄明白

在第一篇文章中,我提到过学生时代的那套逻辑:给我一个工具,我就能改变世界。

今天,工具比以往任何时候都多。AI 会让重写变得近乎免费。因此,问题已不再是用什么来写,而是你究竟在写什么。

先把模型弄明白。然后,再去改变世界。

  • 从零重写
  • 软件架构
  • 领域模型
  • 遗留代码
  • AI 辅助开发
  • 变更日志
  • 项目概述
  • ESPD
  • 叶尔绍夫
Alexander Semiletov,技术团队负责人、开发部门主管
作者

技术团队负责人、开发部门主管

拥有20多年软件开发经验,毕业于莫斯科工程物理学院(MEPhI)。从 .NET/C# 到 Angular 和 React,具备全栈开发经验。关注软件架构、数据模型与 AI 解决方案,建设开发团队与研发流程。

技术交流、专家文章与合作咨询:cn@a3imut.ru

任何使用或复制本站内容的行为,仅在注明作者并附有指向原始网站 cn.a3imut.ru 的直接有效链接的条件下方可进行。