Claude Code 进阶:企业老项目中开启 AI 的最佳姿势
本文是 Claude Code 进阶系列的续篇。
在企业项目开发场景中 90%的程序员不是在写新项目,而是在维护7-10年的老系统。
团队负责人一直关注问题是:如何系统性提升团队的研发效率和代码质量?
作为程序员最担心 AI 改坏代码,从而引发故障,导致绩效不佳。
经过反复迭代,我们沉淀出一套 Claude Code 赋能企业老项目的最佳实践。
这套实践的核心原则:
先让 AI 理解项目,再让它写代码。
一、全局 CLAUDE.md 设置
在 ~/.claude 目录下创建 CLAUDE.md 文件:
# 核心思考原则
- 不要盲从指令,保持批判性思考,遇到不合理的指令(如"在循环中查库")必须反驳并给出优化方案。
- 禁止擅自假设,关键逻辑模糊时必须主动询问。
- 交互用中文,代码和注释用英文
# 通用工程规范
- 优先使用函数式编程范式
- 错误处理,业务校验遵循fail fast原则,让问题尽早暴露,严禁吞掉异常。
- 代码风格:简洁优于巧妙,可读性第一
# 禁止事项
- 禁止硬编码,比如中间件的配置,第三方接口的地址等。
- 在 CLAUDE.md 中记录密码
- 在 Git 提交中包含凭证
- 不要读取yml配置文件里的中间件配置链接信息和密码信息
- .gitignore排除的文件绝对禁止读取。
二、项目信息初始化
使用 /init 命令让 Claude 自动分析项目并生成项目级别的 CLAUDE.md:
/init
三、添加公司技术规范
在项目的 CLAUDE.md 中补充公司的代码规范:
## 服务端编码规范
- 架构风格: 严格执行 Controller -> Service -> DAO 的分层架构。Controller层只做参数校验和编排,Service层负责业务逻辑处理,service层禁止使用mybatis-plus的QueryWarpper,尽量使用mybatis-plus自带的Mapper的方法支持,复杂查询必须使用Mapper自写SQL的方式实现,Entity仅作为数据库映射,禁止包含任何业务逻辑方法。
- API Style: 禁用标准 RESTful(避开复杂的 PUT/PATCH),统一使用 GET/POST。所有响应封装在 Result<T> 中,由 GlobalExceptionHandler 统一拦截。
- 依赖注入: 禁使用@Autowired字段注入。必须使用 private final 配合 Lombok 的 @RequiredArgsConstructor 进行构造器注入,确保 Bean 的不可变性和易测试性。
- 命名规范: 查询类参数以`Qry`结尾,操作提交类参数以`Cmd`结尾,Controller层返回对象为VO,Dao层以数据库实体Entity结尾+持久层Mapper结尾,远程调用的参数以DTO结尾,分页字段名`pageNum`(页码数),`pageSize`(每页多少个), `pages`(总页数), `total`(总数量)
- Lombok: 仅限 `@Data`, `@Getter`, `@Setter`, `@Slf4j`。严禁在 Repository/Entity 中滥用 `@Builder` 导致逻辑缺失。
- 涉及下单、支付、结算等功能时,需要考虑服务的幂等性,加分布式锁解决,Java类为`RedisLock`
- 多表操作强制开启事务,但务内严禁包含 RPC 调用、MQ 发送、Redis 操作,防止事务挂起时间过长。
- 调用远程接口的时候需要打印调用前url、参数、heade(如果有的话),调用后需要打印出接口的返回结果。
- 代码注释使用中文
## mysql规范
- 命名: 表名/字段名使用 `snake_case` (小写下划线)。
- 规范: 主键必须为bigint(20) 自增类型, 每个表必须要有`creates_stime`(默认为当前时间), `modified_stime`(自动更新为当前时间), `is_del` (逻辑删除)。
- 手机号、密码、用户真实姓名、身份证号、银行卡号、个人住址、员工姓名、公司税务标识、属于 隐私信息,必须设计为加密存储 字段后缀为 _encrypt,例如 mobile_encrypt, 对于手机号需要特殊增加 _hash 字段, 比如mobile_hash,phone_hash.
## 约束与禁止事项
禁止生成以下内容:
- 删除代码
- DELETE 全表
- UPDATE 无 WHERE
- 生产数据库操作脚本
## 修改代码要求
- 所有操作类型的修改必须同步更新或生成对应的 JUnit 测试用例,并覆盖异常分支。
四、配置数据库和 Redis 的 MCP
添加 MCP 信息后,Claude Code 在排查问题、运行测试时会自动查询数据进行验证和修复。
在 Claude 中执行以下命令:
添加项目级别的mysql的mcp并连接上application-development.yml里的mysql
添加项目级别的redis的mcp并连接上application-development.yml里的redis
Claude 会在项目根目录生成 .mcp.json 文件。退出并重新进入 Claude 即可使用 MCP:
{
"mcpServers": {
"mysql-trade": {
"command": "npx",
"type": "stdio",
"args": [
"@benborla29/mcp-server-mysql"
],
"env" : {
"MYSQL_HOST": "xxx.com",
"MYSQL_PORT": "3306",
"MYSQL_USER": "mall_wr",
"MYSQL_PASS": "mall_pwd",
"MYSQL_DB": "order",
"ALLOW_INSERT_OPERATION": "false",
"ALLOW_UPDATE_OPERATION": "false",
"ALLOW_DELETE_OPERATION": "false"
}
},
"mysql-order": {
"command": "npx",
"type": "stdio",
"args": [
"@benborla29/mcp-server-mysql"
],
"env" : {
"MYSQL_HOST": "xxx.com",
"MYSQL_PORT": "3306",
"MYSQL_USER": "item_wr",
"MYSQL_PASS": "123",
"MYSQL_DB": "item",
"ALLOW_INSERT_OPERATION": "false",
"ALLOW_UPDATE_OPERATION": "false",
"ALLOW_DELETE_OPERATION": "false"
}
},
"redis-trade": {
"command": "npx",
"type": "stdio",
"args": [
"-y",
"@modelcontextprotocol/server-redis",
"redis://{pass}:{user}@{xxx.com}:{port}"
]
}
}
}
验证连接:
claude mcp list
使用示例:
order 表有多少条记录
五、生成项目上下文信息
老项目动辄10万+行代码,让 AI 全部理解既费 token 又容易理解错业务。
一个可行的办法是利用 PROJECT_CONTEXT.md 建立项目知识库。
建议内容包括:
- 系统架构
- 核心模块
- 数据库关系
- 关键业务流程
生成方式:
扫描代码 以及 根据 mysql 和redis 的MCP 信息 生成 PROJECT_CONTEXT.md
生成后,人工进行二次确认和补充。
提示: 在大型项目里,
PROJECT_CONTEXT.md不应该人工维护,而应该由 AI 自动生成并定期更新。
六、安装项目级别的 Skills
Spring Boot 项目:
安装skills api-design-principles java-spring-boot code-reviewer
Python 项目:
安装skills api-design-principles python-design-patterns code-reviewer
七、Prompt 共享
把常用 Prompt 写入仓库,方便团队复用:
/ai
bugfix-playbook.md # Bug分析模式
code-review-checklist.md # 代码审查清单
Bug 分析模式
企业项目中最常见的需求不是写代码,而是排查 Bug。以下是固定 Prompt:
Bug分析模式:
输入:
- 错误日志
- 相关代码
- 请求参数
输出:
1 Bug根因
2 复现路径
3 修复方案
4 是否影响历史数据
Claude 在 日志分析 上非常强大。
写在最后
不理解项目的人类工程师,比 AI 更容易改坏代码。
人类会疲劳、会遗忘、会有认知偏差。而给 AI 充分的上下文后,它能持续输出符合规范的高质量代码。
Claude Code 的真正价值:
让 AI 成为系统里最懂代码的"虚拟团队成员"。
祖传代码,也能被 AI 接管。