AI编程操作指南
第一章:版本控制与协作 (Git Flow)
1. 提交频率 (Commit Frequency)
-
原子化提交: 任何一个独立的、最小化的功能点在本地测试通过后,都必须立即进行一次
git commit。严禁将多个无关的功能,混在一个commit中。 -
模块化整合: 当一个完整的“业务模块”开发完毕,并通过集成测试后,可以进行一次
git push到远程仓库。
2. 提交信息规范 (Commit Message Convention)
-
严格遵循“Conventional Commits”规范。 格式为:
<type>(<scope>): <subject>feat: 新功能fix: Bug修复docs: 文档变更style: 代码风格(不影响代码运行)refactor: 重构(非bug修复,也非新功能)test: 增加或修改测试
-
目的: 确保提交历史极度清晰、可读、可追溯,并为未来的自动化“更新日志”(Changelog)生成,打下基础。
3. 文档同步 (Documentation Sync)
- 任何对“模块功能”或“公共API”的重大修改,都必须在同一次commit中,包含对相关文档的更新。代码与文档,必须永远同步。
第二章:编程模式 (The Cathedral Model)
4. 开发顺序
-
第一步:数据建模 (Model First):在写任何业务代码前,必须先在数据库层面,清晰地定义数据表结构、字段、以及表与表之间的关系。数据结构,是整个系统的“地基”。
-
第二步:类型定义 (Type Definition):基于数据模型,在代码中(如
types/目录),定义所有可被全局共用的“类型”与“接口”。确保前后端,使用同一套“语言”进行对话。 -
第三步:测试驱动 (Test Driven TDD):
- 后端:在编写具体业务逻辑前,先为其编写接口测试用例 (API Test Case)。定义清楚:输入什么,应该输出什么,边界条件是什么。
- 前端:在编写复杂组件前,先思考并罗列出它的所有核心“状态” (States)。
-
第四步:编码实现 (Implementation):在以上“地基”和“脚手架”都搭建完毕后,才开始进行具体的“后端 -> 前端”编码实现。
5. 自我代码审查 (Self Code Review)
-
在执行
git commit之前,必须启动**“陌生人模式”,对自己将要提交的代码,进行一次强制的、至少5分钟的“自我审查”**。 -
审查清单:
- 命名是否清晰、无歧义?
- 注释是否解释了“为什么”,而非“是什么”?
- 逻辑是否可以更简化?
- 一年后的我,还能看懂这段代码吗?
第三章:架构的原则 (Architectural Principles)
6. 配置驱动的审慎应用
-
原则: “配置驱动”主要用于高度标准化、低自定义需求的CRUD模块。
-
决策记录: (见附录《决策日志》)曾尝试过“动态代码生成”,但因其极大地牺牲了“自定义灵活性”和“长期可维护性”,现已废弃。当前策略是:**以后端配置驱动前端UI生成,但前后端的业务逻辑,均采用“模板代码”而非“动态生成”。
7. 公共模块
-
已建立的公共模块:common/auth
(认证),common/user(用户), common/permission(权限),shared/crud-template(CRUD模板),shared/uploader(上传),shared/errors(错误处理),shared/logger(日志 - 待完成)。 -
原则: 任何一个,可能在两个或以上模块中被重复使用的功能,都必须被抽象并沉淀到“公共模块”中。 严禁在业务模块之间,出现“复制粘贴”的代码。
8. 注释的规范
-
函数级注释:所有非简单的公共函数/方法,都必须有函数级注释,说明其功能、参数、和返回值。
-
块级注释:对于复杂的业务逻辑块,必须使用
// #region [描述]和// #endregion进行包裹。- 目的:确保在IDE中,复杂的逻辑可以被折叠,让代码的宏观结构,一目了然。
-
颗粒度原则:在业务模块中,务必按照“单一职责原则”,将复杂的业务流,拆解成多个功能独立的、可被清晰命名的“私有函数”。用“函数名”代替大部分的“注释”。
附录:《决策日志 (Decision Log)》
- [2025-08-XX] 决策 001:关于“配置驱动”的技术选型
- 问题:如何高效地处理项目中大量的CRUD操作。
- 方案评估:
- A. 动态代码生成:PROS (开发快), CONS (难维护, 难自定义, IDE不友好)。
- B. 模板代码 + 配置驱动UI:PROS (灵活性高, 易维护), CONS (前期需要搭建模板)。
- 最终决议:选择方案B。 核心理由:本项目的长期目标,是成为一个可灵活适应不同客户需求的“解决方案”,而非一个僵化的“内部系统”。因此,“长期可维护性”和“自定义灵活性”的优先级,高于“初期的开发速度”。