项目复盘 4 分钟阅读

一次 Young 阶段 0 的仓库起步记录

记录如何在一次 Codex 协作中,为 Young 办公系统建立顶层目录、代码规范、本地基础设施入口和中文开发文档。

背景

Young 是一个面向企业办公场景的系统建设项目,目标不只是做一个普通 Web 后台,而是逐步覆盖 Web 管理端、桌面用户端、后端服务、组织权限、项目管理、OA 审批,以及未来可能连接 CAD、Tribon 等 Windows 工程软件的本地集成层。

这类项目最容易在起步时陷入两个极端:要么一上来就铺开大量空代码,让仓库看起来很完整;要么只写几份路线文档,迟迟没有可继续演进的工程入口。这次阶段 0 的目标,是在两者之间找到一个稳一点的位置:先建立仓库基础规范,但不提前制造业务实现。

关键问题

这次协作开始时,仓库里已经有技术路线和分步实施提示词。真正要回答的是几个很朴素的问题:

  • 顶层目录应该如何摆放,才能承载后端、前端、桌面端和本地集成层。
  • 哪些配置属于现在就应该确定的基础规范。
  • 本地开发依赖应该如何被后来的人快速理解。
  • 技术决策要记录在哪里,避免后续反复口头讨论。
  • Docker Compose 至少应该提供哪些基础设施入口。

阶段 0 的边界也很重要:只做骨架和文档,不初始化 Maven 多模块、不生成 Vite 应用、不创建 Electron 或 .NET 占位代码。这样仓库不会被“看起来像完成了”的空实现污染,下一阶段也能从干净的基础上继续推进。

实施过程

我先让 Codex 读取了项目的技术路线文档和实施提示词,再检查当前仓库状态。文档里已经明确了 Young 的长期路线:后端采用 Java 21 LTS + Spring Boot 3.5.x + Spring Modulith,前端采用 Vue 3 + TypeScript + Vite + pnpm,桌面端采用 Electron,Windows 本地集成层采用 .NET 10 LTS + C#,工作流引擎选择 Flowable

在这个基础上,阶段 0 落地了几个最小但必要的部分。

第一是顶层目录。仓库新增了 backend/frontend/desktop/integration-host/infra/docs/ 这些入口。每个工程目录只放中文说明文件,用来解释未来职责,不放置假代码。

第二是通用仓库规范。新增 .editorconfig 统一 UTF-8、换行、缩进和尾随空白规则;新增 .gitignore 覆盖 Java、Node、Electron、.NET、Docker、本地环境文件和常见临时产物。

第三是本地基础设施入口。infra/docker-compose.yml 先提供 PostgreSQL、Redis 和 MinIO,作为后续后端、缓存、对象存储能力的共同起点。这个 Compose 文件不是生产部署方案,而是让本地开发依赖有一个稳定入口。

第四是中文开发文档。README.md 被扩展为项目入口,指向技术路线、实施提示词、架构决策记录和本地开发说明;docs/local-development.md 说明本机需要安装的 Java、Maven、Node.js、pnpm、.NET SDK 和 Docker;docs/architecture-decisions.md 用 ADR 形式记录了关键选择。

结果

阶段 0 结束后,仓库已经具备了继续演进的基本形状:

  • 根目录结构清晰,后续每个技术栈都有自己的入口。
  • README 能把读者带到核心文档。
  • 本地开发依赖和基础设施启动方式有文档可查。
  • Docker Compose 配置可以作为后续 PostgreSQL、Redis、MinIO 的统一入口。
  • 关键技术路线以 ADR 形式留下了上下文,而不是散在一次对话里。

验证也保持在阶段 0 应有的尺度:检查目录结构、查看 Git 状态,并运行 Docker Compose 配置解析,确认基础设施配置语法有效。

复盘

这一步真正有价值的地方,不是新增了多少文件,而是把“项目会长成什么样”先变成了可维护的约定。

对一个长期项目来说,仓库骨架不是装饰。它会影响后续模块边界、开发入口、文档习惯和协作成本。尤其是 Young 这种同时包含 Web、桌面、本地集成和后端业务的系统,如果阶段 0 不把边界说清楚,后面很容易把本地能力写进前端页面,把业务模块互相调用成一团,或者让基础设施配置散落到各处。

下一步可以进入后端模块化单体骨架:在 backend/ 下初始化 Maven 多模块工程,让 young-server 至少能启动并提供健康检查。那时就会从“仓库规范”进入“可运行系统”的第一块地基。