程式碼編輯與重構
程式碼編輯和重構是開發者每天都在做的事。我以前改程式碼要開啟編輯器、找到位置、仔細修改、測試、再修改。用Claude Code之後,這些工作變得輕鬆多了。
這篇文章分享我用Claude Code進行程式碼編輯和重構的一些經驗。
單檔案編輯技巧
基礎編輯操作
最簡單的就是改單個檔案。舉個例子:
你有這樣一個使用者服務類:
# user_service.py (修改前)
class UserService:
def __init__(self, db):
self.db = db
def get_user(self, user_id):
return self.db.query(f"SELECT * FROM users WHERE id = {user_id}")
在Claude Code裡說:
给user_service.py加一个创建用户的方法,要包含参数验证和错误处理
Claude Code會分析現有程式碼結構,新增新方法:
# user_service.py (修改后)
class UserService:
def __init__(self, db):
self.db = db
def get_user(self, user_id):
"""获取用户信息"""
return self.db.query(f"SELECT * FROM users WHERE id = {user_id}")
def create_user(self, username, email, password):
"""
创建新用户
Args:
username: 用户名
email: 邮箱地址
password: 密码
Returns:
创建的用户ID
Raises:
ValueError: 当参数不合法时
DatabaseError: 当数据库操作失败时
"""
# 参数验证
if not username or len(username) < 3:
raise ValueError("用户名至少需要3个字符")
if not email or '@' not in email:
raise ValueError("邮箱格式不正确")
if not password or len(password) < 6:
raise ValueError("密码至少需要6个字符")
# 创建用户
try:
user_id = self.db.execute(
"INSERT INTO users (username, email, password) VALUES (?, ?, ?)",
(username, email, password)
)
return user_id
except Exception as e:
raise DatabaseError(f"创建用户失败: {str(e)}")
精確定位編輯
檔案比較大的時候,可以直接說要改哪裡:
在UserService类的get_user方法里加个缓存功能
Claude Code會:
- 找到UserService類
- 定位get_user方法
- 在不影響其他程式碼的情況下新增快取
def get_user(self, user_id):
"""获取用户信息(带缓存)"""
# 检查缓存
cache_key = f"user:{user_id}"
cached_user = self.cache.get(cache_key)
if cached_user:
return cached_user
# 从数据库查询
user = self.db.query(f"SELECT * FROM users WHERE id = {user_id}")
# 更新缓存
if user:
self.cache.set(cache_key, user, ttl=300)
return user
條件編輯
Claude Code可以根據程式碼的當前狀態做出智慧決策:
如果UserService还没有缓存功能,请添加Redis缓存支持
Claude Code會:
- 檢查是否已存在快取相關程式碼
- 如果不存在,新增Redis依賴和快取邏輯
- 如果已存在,告知你當前狀態
多檔案協同編輯
跨檔案重構
實際專案裡,重構往往會涉及多個檔案。Claude Code的強大之處在於它能理解檔案之間的依賴關係。
舉個例子:把使用者認證邏輯從控制器裡提取到一個獨立的服務類。
把auth_controller.py里的认证逻辑提取到一个新的AuthService类,
然后更新所有相关的导入和调用
Claude Code會:
- 分析當前程式碼結構
# auth_controller.py (修改前)
from flask import request, jsonify
import jwt
import bcrypt
class AuthController:
def login(self):
username = request.json.get('username')
password = request.json.get('password')
# 验证用户
user = User.query.filter_by(username=username).first()
if not user or not bcrypt.checkpw(password.encode(), user.password):
return jsonify({'error': 'Invalid credentials'}), 401
# 生成token
token = jwt.encode({'user_id': user.id}, 'secret_key', algorithm='HS256')
return jsonify({'token': token})
- 建立新的服務檔案
# auth_service.py (新建)
import jwt
import bcrypt
from datetime import datetime, timedelta
from models.user import User
class AuthService:
"""认证服务类"""
def __init__(self, secret_key='secret_key'):
self.secret_key = secret_key
def authenticate(self, username, password):
"""
验证用户凭据
Args:
username: 用户名
password: 密码
Returns:
User对象或None
"""
user = User.query.filter_by(username=username).first()
if not user:
return None
if not bcrypt.checkpw(password.encode(), user.password):
return None
return user
def generate_token(self, user_id, expires_in=3600):
"""
生成JWT token
Args:
user_id: 用户ID
expires_in: 过期时间(秒)
Returns:
JWT token字符串
"""
payload = {
'user_id': user_id,
'exp': datetime.utcnow() + timedelta(seconds=expires_in)
}
return jwt.encode(payload, self.secret_key, algorithm='HS256')
def verify_token(self, token):
"""
验证JWT token
Args:
token: JWT token字符串
Returns:
解码后的payload或None
"""
try:
return jwt.decode(token, self.secret_key, algorithms=['HS256'])
except jwt.ExpiredSignatureError:
return None
except jwt.InvalidTokenError:
return None
- 更新控制器程式碼
# auth_controller.py (修改后)
from flask import request, jsonify
from services.auth_service import AuthService
class AuthController:
def __init__(self):
self.auth_service = AuthService()
def login(self):
username = request.json.get('username')
password = request.json.get('password')
# 使用AuthService验证
user = self.auth_service.authenticate(username, password)
if not user:
return jsonify({'error': 'Invalid credentials'}), 401
# 生成token
token = self.auth_service.generate_token(user.id)
return jsonify({'token': token})
- 更新其他相關檔案
Claude Code會自動檢查並更新其他使用AuthController的檔案:
# routes.py (自动更新)
from controllers.auth_controller import AuthController
auth_controller = AuthController() # 确保正确初始化
@app.route('/login', methods=['POST'])
def login():
return auth_controller.login()