正在学习

10.2 总结与导航大型代码库

重构前

import hashlib

import sqlite3

class AuthManager:

def __init__(self, db_path):

    self.db_path = db_path

def register_user(self, username, password):

    hashed = hashlib.sha256(password.encode()).hexdigest()

    conn = sqlite3.connect(self.db_path)

    cur = conn.cursor()

    cur.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, hashed))

    conn.commit()

    conn.close()

def login(self, username, password):

    conn = sqlite3.connect(self.db_path)

    cur = conn.cursor()

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

    row = cur.fetchone()

    conn.close()

    if row:

        return row[0] == hashlib.sha256(password.encode()).hexdigest()

    return False

上述代码将哈希运算、数据访问和业务逻辑混杂在一起。让我们提示 Claude 进行增量重构:

"Claude,请重构此类,将数据库操作与认证逻辑分离。引入一个可复用的数据库工具函数,完善文档字符串,并保持原有行为不变。"

Claude 重构后的结果可能如下所示:

练习题

在原始的 AuthManager 类中,register_user 方法的目的是什么?

A. 通过检查用户名和密码来验证用户
B. 将新用户的用户名和哈希后的密码插入到数据库
C. 连接到 SQLite 数据库
D. 关闭数据库连接

源材料中提到的原始 AuthManager 类的主要问题是什么?

A. 它没有对密码使用哈希处理
B. 它缺乏适当的数据库连接处理
C. 它将哈希处理、数据访问和业务逻辑混合在一起
D. 它不支持用户注册

以下哪些是在原始 AuthManager 类的 login 方法中执行的步骤?(选择所有适用的)

A. 连接到 SQLite 数据库
B. 执行 SELECT 查询以检索用户的哈希密码
C. 使用 SHA256 对提供的密码进行哈希运算
D. 将新用户插入数据库
E. 比较检索到的哈希密码与新哈希的密码

原始的 AuthManager 类使用 SHA256 哈希算法来处理密码。

在原始的 AuthManager 类中,___ 方法负责向数据库添加新用户。

解释为什么在 AuthManager 类中将数据库操作与身份验证逻辑分离很重要。

给出 Claude 重构 AuthManager 类的指令是什么?

A. 为该类添加更多功能
B. 从该类中移除所有数据库操作
C. 将数据库操作与身份验证逻辑分离,引入可复用的数据库工具,改进文档字符串,并保持相同的行为
D. 用不同的编程语言重写该类

以下哪些是与 Claude 等 AI 协作时有效上下文共享的好处?(选择所有适用的)

A. 减少重复工作
B. 促进标准化
C. 加强工程文化
D. 增加代码库的复杂性
E. 提高 AI 建议的准确性

在大型项目中,Claude 可以一次性处理整个项目,没有任何上下文限制。

描述在大型项目中与 Claude 协作时进行有效上下文管理的一种主要技术。

原始 AuthManager 类实现的主要问题是什么?

A. 它使用 SHA-256 哈希,这太慢了
B. 它混合了哈希处理、数据访问和业务逻辑
C. 它没有使用 SQLite 进行数据库操作
D. 它缺少所有方法的适当文档字符串

重构后的 AuthManager 应在改进其结构的同时保持与原始版本相同的行为。

为什么在 AuthManager 类中将数据库操作与认证逻辑分离很重要?

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

立即登录