正在学习

10.3 增量重构与文档化

重构之后

import hashlib

import sqlite3

from typing import Optional

class DatabaseHelper:

"""用于数据库交互的实用工具类。"""

def __init__(self, db_path: str):

    self.db_path = db_path

def execute_query(self, query: str, params: tuple = ()) -> Optional[list]:

    """执行查询并返回可用的获取结果。"""

    with sqlite3.connect(self.db_path) as conn:

        cur = conn.cursor()

        cur.execute(query, params)

        if query.strip().lower().startswith("select"):

            return cur.fetchall()

        conn.commit()

    return None

class AuthManager:

"""处理用户注册和登录认证。"""

def __init__(self, db_helper: DatabaseHelper):

    self.db = db_helper

def _hash_password(self, password: str) -> str:

    """使用 SHA-256 对密码进行哈希处理。"""

    return hashlib.sha256(password.encode()).hexdigest()

def register_user(self, username: str, password: str):

    """通过保存哈希后的密码来注册新用户。"""

    hashed = self._hash_password(password)

    self.db.execute_query(

        "INSERT INTO users (username, password) VALUES (?, ?)",

        (username, hashed)

    )

def login(self, username: str, password: str) -> bool:

    """根据存储的哈希值验证用户凭据。"""

    result = self.db.execute_query(

        "SELECT password FROM users WHERE username=?", (username,)

    )

    if not result:

        return False

    stored_hash = result[0][0]

    return stored_hash == self._hash_password(password)

此次重构引入了单一职责设计,同时保留了完全相同的功能。Claude 还添加了文档字符串并提升了可读性 —— 展示了在不破坏兼容性的前提下进行渐进式改进。

你可以在此提示的基础上进行扩展:

"Claude,为 DatabaseHelper 和 AuthManager 生成单元测试,以验证重构后的行为。"

Claude 将会返回一个完整的、可运行的基于 pytest 的测试套件,在提交前验证此次重构。

澄清表:重构工作流总结

步骤 目标 Claude 的角色 开发者的行动
1. 定义范围 确定要重构的一个类或函数 理解用途和依赖关系 提供清晰的上下文
2. 生成重构 在不改变行为的前提下重写逻辑 生成优化且有文档说明的代码 审查并测试输出
3. 验证 确认新旧版本行为一致 编写或检查单元测试 在本地运行测试
4. 文档化 解释更改的内容及原因 添加文档字符串和更新日志文本 提交并推送
5. 迭代 继续处理下一个组件 保持风格的连续性 在新模块中重复此过程

使用 Claude Code 进行渐进式重构为现代化大型项目提供了一条安全、结构化的路径。开发人员可以通过经过验证的、稳定的改进来演进系统,而不是进行高风险的完全重写。自我文档化功能(如文档字符串和更新日志)的引入,确保了长期的可维护性和清晰性。

通过采用由 Claude 辅助的小型迭代,团队可以确信每一次更改都强化了代码库,而不会破坏稳定性。在下一节中,我们将在此方法的基础上探讨多文件一致性和文档对齐,确保随着代码的演进,架构和书面文档也能同步发展。

10.4 在多个提示中保持一致性

在大型项目中使用 Claude Code 时,开发人员通常会将交互拆分为多个提示 —— 每个提示对应一个模块、功能或调试会话。然而,随着项目的增长,在这些提示之间保持一致性成为一项关键挑战。如果没有连续性,Claude 可能会做出偏离团队标准的样式更改、以不同方式重命名变量,或者对先前的上下文做出不一致的解释。

Claude 的对话智能可以在单个会话内保持上下文,但当跨多个会话或团队成员协作时,开发人员仍需手动管理提示的一致性。在本节中,我们将探讨如何在与 Claude 的所有交互中保持一致的语调、结构和编码标准。你将学习建立持久上下文、强制实施样式规则以及让 Claude 在整个长期项目中与团队"保持同步"的技术。

概念发展

Claude 不会在不同的提示之间存储长期记忆;它仅使用你提供的上下文。这意味着保持一致性需要有策略的提示工程和严谨的工作流程。以下是实现这一目标的三个基本原则:

  1. 持久上下文共享 —— 维护一个轻量级的"Claude 上下文文件"(例如 claude_context.md),其中概述编码约定、架构和项目目标。你可以在每个新 Claude 会话开始时粘贴此文件以重新建立一致性。
  2. 样式和语调锚定 —— 一次性定义特定的约定并保持一致地复用。这包括命名标准、文档字符串格式、测试模式和文件结构。只要每次都重申这些规则,Claude 就能完全遵循。
  3. 增量会话链接 —— 当任务跨越多个提示时,提醒 Claude 之前完成的工作。例如:"这是你之前帮助重构的类 —— 现在让我们为它添加单元测试。"这可以防止 Claude 对代码意图或依赖关系产生偏离的假设。

这些技术共同确保每次交互 —— 无论多么孤立 —— 都有助于产生统一、可预测的项目输出。

动手实践示例:使用共享的上下文文件

想象你正在开发一个基于 FastAPI 的内部服务,多名工程师在不同的模块中使用 Claude。在没有共享上下文的情况下,每个开发者的提示可能会导致结构不一致。为了解决这个问题,你创建了一个名为 claude_context.md 的中央上下文文件,用来定义项目的预期规范。

练习题

DatabaseHelper类的主要用途是什么?

A. 处理用户身份验证
B. 管理数据库交互
C. 对密码进行哈希处理
D. 直接执行SQL查询

在 DatabaseHelper 类中,execute_query 方法对于 SELECT 查询返回什么?

A. 无
B. 受影响的行数
C. 获取结果的列表
D. 指示成功的布尔值

AuthManager 类的用途是什么?

A. 管理数据库连接
B. 处理用户注册和登录身份验证
C. 执行 SQL 查询
D. 对密码进行哈希处理以供存储

AuthManager 类中的 _hash_password 方法是如何对密码进行哈希处理的?

A. 使用 MD5
B. 使用 SHA-1
C. 使用 SHA-256
D. 使用 bcrypt

关于 AuthManager 类中的 register_user 方法,下列哪些说法是正确的?(选择所有适用的)

A. 它将明文密码保存到数据库中
B. 它在保存之前对密码进行哈希处理
C. 它使用 DatabaseHelper 类来执行查询
D. 它需要用户名和密码作为参数

哪些步骤是重构工作流的一部分?(选择所有适用的)

A. 定义范围
B. 生成重构
C. 验证
D. 记录
E. 迭代
F. 部署

AuthManager 类中的 login 方法在提供的密码与存储的哈希匹配时返回 True。

DatabaseHelper 类对所有类型的查询都会将更改提交到数据库。

AuthManager 类中的 _____ 方法负责使用 SHA-256 对密码进行哈希处理。

_____类被AuthManager类用于与数据库交互。

解释 DatabaseHelper 类中 execute_query 方法的用途。

描述 AuthManager 类的登录方法中验证用户凭据的过程。

哪些原则有助于在多个提示之间保持一致性?(选择所有适用的)

A. 持久上下文共享
B. 风格和语气锚定
C. 增量会话链接
D. 直接代码执行
E. 自动化测试

DatabaseHelper 类被设计为仅处理 SELECT 查询。

在重构后的代码中,将数据库操作与认证逻辑分离有什么好处?

在重构后的代码中,DatabaseHelper 类的主要用途是什么?

A. 处理用户注册和登录认证
B. 提供一个用于数据库交互的工具
C. 使用 SHA-256 对密码进行哈希处理
D. 仅执行 SELECT 查询

文中描述的重构工作流程包含以下哪些步骤?(选择所有适用的)

A. 定义范围
B. 生成重构
C. 验证
D. 记录
E. 部署
F. 迭代

在重构后的代码中,AuthManager类既负责哈希密码,又负责执行数据库查询。

AuthManager 类中的 __________ 方法用于在将密码存储到数据库之前使用 SHA-256 对密码进行哈希处理。

请解释 DatabaseHelper 类中的 execute_query 方法是如何在重构后的代码中实现关注点分离的。

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

立即登录