ENGINEERING RULES

ENGINEERING RULES

文件三:03_ENGINEERING_RULES.md

# 文件三:03_ENGINEERING_RULES.md # 架构、代码与工程永久规则 版本:1.0 状态:长期有效 作用:防止 AI 随着项目变大,把代码写成无法维护的“毛线团”。 # 1. 总原则 代码首先必须: - 正确。 - 其次: - 可维护。 - 然后: - 可扩展。 - 最后才是: - 聪明。 禁止为了炫技引入不必要复杂度。 # 2. 单一职责 一个模块尽可能只负责一个主要职责。 - 避免: - 一个文件同时: - UI - 数据库 - API - 认证 - 缓存 - 日志 - 全做。 # 3. 分层原则 原则上保持: ` UI ↓ 业务逻辑 ↓ Service ↓ API ↓ 数据访问 ↓ Database ` 避免跨层乱调。 # 4. 前端不得直接访问数据库 禁止前端包含: - 数据库密码。 - 数据库连接。 - 管理员数据库能力。 # 5. API统一管理 不得每个组件随便: ` fetch("http://...") ` 应建立统一API Client。 - 负责: - Base URL。 - 认证。 - 超时。 - 错误处理。 - 状态码。 # 6. 配置与业务代码分离 以下必须尽可能配置化: - API地址。 - 端口。 - 域名。 - 数据库地址。 - 第三方接口。 - 模型名称。 - 字体。 - 功能开关。 - 环境变量。 # 7. 禁止环境硬编码 正式业务代码禁止绑定: - localhost。 - 192.0.2.10。 - 开发端口。 - 本地绝对路径。 - 个人电脑路径。 # 8. 模块边界 公共功能应抽离。 - 但禁止过度抽象。 - 规则: - 重复一次: - 可以接受。 - 重复两次: - 关注。 - 重复三次以上: - 评估公共抽象。 # 9. 禁止循环依赖 例如: - A依赖B。 - B又依赖A。 - 必须拆分公共职责。 # 10. 控制文件体积 如果一个文件越来越大: - 应分析是否职责过多。 - 但禁止为了“文件短”机械拆分。 # 11. 函数规则 函数应该: - 职责明确。 - 名称可理解。 - 输入清晰。 - 输出稳定。 - 副作用可控。 # 12. 命名规则 禁止大量: - a - b - x - temp - test1 - data2 - newnew - final2 使用可以看懂意义的名称。 # 13. 禁止魔法值 例如: ` if (role === 7) ` 应有清晰定义。 # 14. 错误必须处理 禁止: ` try { ... } catch {} ` 吞掉错误。 # 15. 异步必须处理失败 Promise。 - Fetch。 - Database。 - File。 - AI。 - Third-party API。 - 必须考虑: - 成功。 - 失败。 - 超时。 # 16. API统一返回规范 尽可能统一: ` { "success": true, "data": {}, "error": null } ` 或项目既有标准。 - 不能不同接口完全随机返回。 # 17. HTTP状态码合理使用 200: - 成功。 - 201: - 创建成功。 - 400: - 请求错误。 - 401: - 未认证。 - 403: - 无权限。 - 404: - 不存在。 - 409: - 冲突。 - 429: - 频率限制。 - 500: - 服务器错误。 # 18. 数据验证 前端验证: - 用于用户体验。 - 后端验证: - 用于安全和数据完整性。 - 后端验证不可省略。 # 19. 数据库操作原则 优先: - 参数化查询。 - ORM安全接口。 - 事务。 - 索引。 - 分页。 禁止直接拼接用户输入形成SQL。 # 20. 数据迁移规则 修改数据库结构: - 必须考虑已有数据。 - 不得直接: - 删表。 - 删字段。 - 改字段类型。 - 而不考虑迁移。 # 21. 第三方依赖规则 新增依赖之前必须判断: - 是否真的需要。 - 是否已有能力实现。 - 是否仍维护。 - 是否安全。 - 是否增加项目复杂度。 # 22. 禁止为了一个小功能安装巨大框架 能用现有能力安全完成,就不要随意增加依赖。 # 23. Lock文件必须保留 例如: - package-lock.json。 - pnpm-lock.yaml。 - yarn.lock。 # 24. 不得擅自升级核心依赖 尤其: - 框架主版本。 - 数据库。 - 认证库。 - 构建工具。 - UI框架。 升级必须说明影响。 # 25. 删除代码规则 删除前确认: - 是否引用。 - 是否动态调用。 - 是否部署使用。 - 是否兼容旧逻辑。 # 26. 重构规则 重构必须满足: - 业务行为尽可能不变。 - 接口尽可能不变。 - 数据不损坏。 - 测试重新通过。 # 27. AI修改代码必须最小化影响 修一个Bug: - 优先改最少相关代码。 - 不得顺便把整个项目重新组织一遍。 # 28. 禁止无关修改 任务是: - 修登录Bug。 - 不得顺便: - 改首页。 - 换字体。 - 改目录。 - 升级框架。 - 重新命名几百个变量。 # 29. 临时代码规则 临时代码必须明确: - TODO。 - TEMP。 - DEBUG。 - 并在上线前清理。 # 30. 日志代替随意console 开发期可以合理使用console。 - 生产环境应使用正式日志策略。 - 禁止留下大量: - console.log(secret) - console.log(password) # 31. 环境分离 至少区分: - development。 - production。 - 必要时: - test。 # 32. 本地开发不能成为隐性依赖 项目不能依赖: - 某个人电脑已有文件。 - 手工复制资源。 - 未记录环境变量。 - 历史缓存。 # 33. 干净安装必须能运行 目标: - 项目代码 依赖声明 配置文档 - 即可重新搭建。 # 34. 每次修改必须记录 涉及文件。 - 修改原因。 - 影响范围。 - 配置变化。 - 依赖变化。 - 数据库变化。 # 35. AI完成编码任务后必须进行自检 至少: - 语法。 - 引用。 - 类型。 - 构建。 - 受影响功能。 # 36. 代码通过 ≠ 任务完成 必须区分: - 【代码写完】 - 【编译通过】 - 【运行通过】 - 【测试通过】

六大规则共同执行协议

以下内容同时适用于全部六份文件。

A. AI每次任务开始前

先阅读:

  • 与当前任务有关的规则文件。
  • 如果任务涉及多个领域:
  • 全部读取。 例如:
  • 修改登录:
  • 必须读取:
  • 01_REQUIREMENTS_RULES.md
  • 03_ENGINEERING_RULES.md
  • 04_SECURITY_RULES.md
  • 05_TESTING_RULES.md 修改视觉:
  • 读取:
  • 01_REQUIREMENTS_RULES.md
  • 02_DESIGN_SYSTEM_RULES.md
  • 05_TESTING_RULES.md 准备上线:
  • 六份全部读取。

B. 规则冲突优先级

如发生冲突:

  • 安全与数据完整性 明确用户需求 产品规则 架构规则 设计规则 优化建议

C. AI不能自行修改规则

除非用户明确要求:

  • “修改规则文件”。
  • 否则:
  • 这些文件只读。

D. 现有项目与规则冲突怎么办

不得为了符合规则立即大规模重写。

  • 先输出:
  • 规则:
  • 当前实现:
  • 差异:
  • 严重程度:
  • 建议迁移方式: 再决定是否修复。

E. 每次修改之前

先回答自己:

  • 我正在解决什么问题?
  • 哪些文件必须修改?
  • 哪些文件不应该碰?
  • 是否涉及数据?
  • 是否涉及权限?
  • 是否影响API?
  • 是否影响UI?
  • 如何验证?

F. 每次修改之后

必须检查:

  • 代码是否能运行。
  • 是否引入新错误。
  • 相关功能是否正常。
  • 是否影响其他模块。
  • 是否需要更新文档。

G. 禁止假完成

以下情况不得说:

  • “全部完成”。
  • 仍有未测试。
  • 仍有报错。
  • Build失败。
  • 接口未验证。
  • 缺少环境。
  • 第三方服务没测试。 应明确:
  • 已完成:
  • 未完成:
  • 无法验证:
  • 风险:

H. 修改范围原则

永远优先:

  • 小范围。
  • 可验证。
  • 可回滚。
  • 低耦合。 而不是:
  • 一次改几十个无关文件。

I. 项目长期目标

本项目必须尽量保持:

  • 可理解。
  • 可修改。
  • 可维护。
  • 可测试。
  • 可部署。
  • 可恢复。
  • 可扩展。
  • 安全。 最终目标不是:
  • “AI这次把它跑起来了。”
  • 而是:
  • “即使换一个AI、换一台电脑、换一个开发者,这个项目依然能够继续维护。”

AI任务统一结束报告模板

每一次AI开发任务结束,都使用:

本次任务

修改文件

新增文件

删除文件

修改功能

配置变化

依赖变化

数据库变化

安全影响

实际测试

Build状态

未验证内容

已知问题

后续建议

最后只能使用:

  • ✅ 完成并验证
  • ⚠️ 完成但仍有未验证项目
  • ❌ 未完成
  • 三种结论之一。