正在学习

重构后

Claude 上下文文件

项目名称:内部 API 网关

框架:FastAPI

语言:Python 3.11

编码规范:

  • 使用 PEP 8 格式。

  • 为所有函数包含类型提示。

  • 在三引号中使用文档字符串为所有类和方法编写文档。

  • 使用 FastAPI 的 HTTPException 处理错误。

  • 避免不必要的全局变量。

  • 适用时优先使用异步端点。

架构概览:

  • /routes 文件夹包含所有 API 端点。

  • /services 处理业务逻辑。

  • /models 通过 SQLAlchemy 定义数据库模式。

  • /utils 提供共享的辅助函数。

测试:

  • 对所有测试使用 pytest。

  • 遵循命名模式:test_<模块>_<函数>()


现在,每当你开始一个 Claude 会话时,在给出指令之前,将此上下文文件的内容预先添加到你的提示中。例如:

"根据下面的项目结构和约定,生成一个新的用于管理用户会话的路由。"

然后,Claude 将自动使输出与定义的标准保持一致——一致的命名、文档字符串格式和错误处理。

你也可以让 Claude 审查模块之间的一致性:

"比较这两个路由文件,并识别在命名、文档或异步使用方面的不一致性。"

Claude 可以检测出以下差异:

- `get_user()` 在一个文件中是同步的,而在另一个文件中是异步的。

- 缺失或不匹配的文档字符串。

- 像 `user_id` 与 `uid` 这样的变量名差异。

通过提示 Claude 强制使用你的上下文文件作为参考,你可以在多个贡献者和会话之间维护单一的事实来源。

澄清表:跨提示一致性的策略

| 策略 | 目的 | 实施 | Claude 的角色 |
| --- | --- | --- | --- |
| 上下文锚定 | 保持长期理解 | 将项目目标和标准的摘要粘贴到每个新提示中 | 使代码与定义的规则保持一致 |
| 提示链接 | 逻辑上链接相关会话 | 在继续任务时包含之前输出的摘要 | 保持风格和逻辑的连贯性 |
| 风格执行 | 跨模块标准化代码 | 使用相同的格式和命名指南 | 强制结构统一性 |
| 验证提示 | 自动审计一致性 | 要求 Claude 审查多个文件以发现风格漂移 | 主动检测不一致 |
| 文档强化 | 保持解释统一 | 要求 Claude 使用相同的文档字符串或注释格式 | 保持专业清晰度 |

跨多个提示的一致性是将实验性的 AI 辅助编码与专业的、可维护的工作流程区分开来的关键。通过使用持久上下文文件、结构化提示和可重复的约定,Claude Code 不仅仅是一个助手——而是你工程团队中一个有纪律的成员。

保持一致的语调、格式和逻辑可确保每一段代码都感觉像是由一个统一的开发人员声音精心打造的,即使是在数十个 Claude 辅助会话中生成的。

在下一节中,我们将探讨多文件编辑和同步,其中 Claude 同时协调跨多个模块的更新——确保当系统的某个部分发生变化时,项目的其余部分与之和谐地演进。

## 10.5 示例:重构遗留的单体应用

遗留的单体应用通常从一个单文件的概念验证演变成一个庞大的脚本,将路由、数据访问、验证和业务逻辑混合在一起。它们可以工作——直到不能工作。小型变更变得有风险,测试难以编写,新开发人员难以找到任何东西的位置。在这个示例中,你将获取一个紧凑的单文件 FastAPI 单体应用,并将其重构为一个结构良好的小型应用程序,具有清晰的层级、微小的服务边界和单元测试。目标是在不改变外部行为的情况下实现增量式现代化。

概念开发

良好的重构分离关注点并使依赖关系显式化。在实践中,这意味着四个步骤。首先,在隐藏 SQL 细节的存储库后面隔离数据访问。其次,将规则和横切检查移动到服务层,使路由保持精简。第三,将 I/O 保持在边缘——路由器和数据库助手——以便核心逻辑易于测试。第四,引入一个最小的启动路径来初始化依赖项,而不是全局变量。使用 Claude Code,你引导每一步:描述要分离的内容,请求小单元的完整替换,并在每次更改后通过测试验证行为。

实践示例

下面的遗留单体应用"可以工作",但将所有内容耦合在一起:全局数据库访问、内联验证以及分散在端点中的业务规则。

创建此文件:

练习题

内部 API 网关项目使用哪个框架?

A. Flask
B. Django
C. FastAPI
D. Tornado

内部 API 网关项目使用的主要语言是什么?

A. Java
B. Python 3.11
C. C++
D. JavaScript

以下哪些是资料中提到的编码标准?(选择所有适用的)

A. 使用 PEP 8 格式
B. 为所有函数添加类型提示
C. 对字符串使用单引号
D. 使用 FastAPI 的 HTTPException 处理错误

源材料建议在必要时使用全局变量。

在架构概览中,/services 文件夹负责处理业务逻辑。

在架构概览中,___ 文件夹包含所有 API 端点。

___ 文件夹通过 SQLAlchemy 定义数据库模式。

在架构概览中,/utils 文件夹的用途是什么?

解释项目中命名测试函数的测试标准。

以下哪些是维护项目一致性的原则?(选择所有适用的)

A. 持久上下文共享
B. 风格与语气锚定
C. 增量会话链接
D. 频繁的代码审查

以下哪项是遗留单体(legacy monolith)重构的目标?

A. 显著改变外部行为
B. 在不改变外部行为的前提下逐步实现现代化
C. 一次性重写整个代码库
D. 删除所有文档

以下哪些是重构工作流中的步骤?(选择所有适用的)

A. Define Scope
B. Generate Refactor
C. Validate
D. Deploy to Production

重构过程中隔离数据访问的第一步是什么?

以下哪些是结合编码标准和架构的组合知识点?(选择所有适用的)

A. 使用 PEP 8 格式和 /routes 文件夹用途
B. 为所有函数包含类型提示和 /services 文件夹用途
C. 使用 FastAPI 的 HTTPException 处理错误和 /models 文件夹用途
D. 在适用的地方使用异步端点和 /utils 文件夹用途

以下哪些是测试重构工作流和编码标准的综合知识点?(多选)

A. 定义范围并使用 PEP 8 格式
B. 生成重构并为所有函数添加类型提示
C. 使用 FastAPI 的 HTTPException 进行验证和错误处理
D. 记录文档并在适用的情况下优先使用异步端点

/routes 文件夹中实现新的 API 端点时,根据项目的编码规范,以下哪种是处理错误的最合适方式?

A. 使用 Python 内置的 Exception 类来抛出错误。
B. 使用 FastAPI 的 HTTPException 来抛出 HTTP 特定的错误。
C. 将错误信息打印到控制台并返回通用响应。
D. 忽略错误,让应用程序崩溃。

项目的编码标准推荐以下哪些做法?(选择所有适用的)

A. 对所有 Python 代码使用 PEP 8 格式。
B. 为所有函数添加类型提示。
C. 为所有类和方法使用三引号文档字符串。
D. 优先选择同步端点而非异步端点。
E. 避免不必要的全局变量。

/models 文件夹负责使用 SQLAlchemy 定义数据库 schema,并且它还应包含与数据操作相关的业务逻辑。

在为 API 编写测试时,要遵循的命名模式是 test_<module>_<function>()。这确保了测试是有组织的,并且可以根据它们正在测试的 ___ 轻松识别。

解释"隔离数据访问"(Isolate Data Access)这一概念如何与项目架构保持一致,并具体提及相关的文件夹。

登录后解锁笔记、知识点解析、AI 问答

立即登录