T02
设计与开发
⭐⭐
⏱ 约 30 分钟
功能实现
Feature Implementation
💡 适用场景: 日常编码、功能开发
📄 T02: Feature Implementation(功能实现) 其他
⭐⭐ 初中级 | 将需求转化为可工作的代码
💡 核心概念 核心概念
功能实现是将需求转化为实际代码的过程。好的实现应该:
- 功能正确且完整
- 代码清晰可维护
- 性能符合要求
- 考虑错误处理
- 易于测试和扩展
关键问题:
- 代码质量: 是否遵循最佳实践?
- 功能完整: 是否覆盖所有场景?
- 性能指标: 是否满足性能要求?
- 错误处理: 是否正确处理各种异常?
- 可维护性: 代码是否易于理解和修改?
- 集成方式: 如何集成到现有系统?
✅ 最佳实践 最佳实践
🎯 原则1: 充分的上下文信息
- ❌ 差: "写一个API端点"
- ✅ 好: "用Spring Boot写一个POST /api/users端点,接收用户信息JSON,验证邮箱唯一性,保存到MySQL,返回201和新用户ID"
🎯 原则2: 明确的约束和要求
- ❌ 差: "写个登录功能"
- ✅ 好: "实现登录,要求:使用JWT,token过期时间30分钟,支持记住我选项,登录失败3次后锁定账号15分钟"
🎯 原则3: 给出具体的输入输出示例
- ❌ 差: "处理用户数据"
- ✅ 好: "输入: {email: 'user@example.com', password: 'pwd123'} 输出: {token: '...', user: {id, name, email}}"
🎯 原则4: 考虑集成和依赖
- ❌ 差: "写个支付功能"
- ✅ 好: "使用Stripe API集成支付,调用我们的order-service创建订单,发送消息到Kafka通知库存系统"
💬 ✅ 优质Prompt示例 Prompt 示例
示例1: 功能模块实现
Prompt:
用Python写一个订单处理模块。
需求:
- 功能: 验证订单信息,计算总价,创建订单
- 输入:
{
user_id: int,
items: [{product_id, quantity, price}, ...],
coupon_code: string (可选),
shipping_address: {country, postal_code, ...}
}
- 输出: {order_id, total_price, tax, status}
验证规则:
1. 商品数量必须>0
2. 支持的国家列表: [美国,加拿大,英国,日本]
3. 如果使用优惠券,需要验证有效性和适用范围
价格计算:
- 商品总额 + 税费(按国家不同) + 运费 - 优惠券折扣
- 如果订单>100美元,免运费
错误处理:
- 商品ID不存在 → 返回具体错误
- 优惠券失效 → 返回错误但仍可以继续
- 国家不支持 → 返回错误,不创建订单
约束:
- 必须支持事务(要么全部成功要么全部失败)
- 要能处理并发订单
- 响应时间<200ms
请提供:
1. OrderProcessor类定义
2. 完整的价格计算逻辑
3. 错误处理和验证
4. 一个end-to-end的使用示例
5. 单元测试框架(不需要完整实现)
预期输出:
- 完整的模块代码
- 清晰的类设计和方法
- 完善的错误处理
- 可运行的示例
适用场景: 核心业务逻辑、复杂数据处理、交易类功能
示例2: API端点开发
Prompt:
使用FastAPI实现一个用户管理API。
端点规范:
1. POST /api/users - 创建用户
请求: {name, email, password, role}
响应: {id, name, email, created_at} (201)
2. GET /api/users/{id} - 获取用户
响应: {id, name, email, role, status}
3. PATCH /api/users/{id} - 更新用户
请求: {name?, email?, role?}
响应: 更新后的用户信息
4. DELETE /api/users/{id} - 删除用户
响应: 204 No Content
要求:
- 所有端点需要JWT认证(除了创建用户前可以注册)
- 邮箱必须唯一,不能重复
- 密码存储必须加密(使用bcrypt)
- 支持分页(可选的limit和offset)
- 错误响应格式统一: {error: string, code: string, details?: object}
- API需要数据验证(邮箱格式、密码强度等)
- 删除用户需要管理员权限
- 记录所有操作日志
异常处理:
- 用户已存在 → 409 Conflict
- 找不到用户 → 404 Not Found
- 权限不足 → 403 Forbidden
- 输入无效 → 422 Unprocessable Entity
请生成:
1. FastAPI应用的主要代码
2. 模型定义(Pydantic)
3. 数据库操作(使用SQLAlchemy)
4. 认证中间件
5. 错误处理和验证
6. 一个完整的使用示例(curl命令)
预期输出:
- FastAPI应用骨架
- 完整的请求/响应处理
- 数据验证和错误处理
- 使用示例和文档
示例3: 数据处理逻辑
Prompt:
实现一个日志分析功能。
输入:
- 应用日志文件(每行一条日志)
- 日志格式: [时间] [级别] [模块] 消息
需要实现:
1. 解析日志,提取字段
2. 按时间范围过滤
3. 按级别分类(ERROR, WARN, INFO, DEBUG)
4. 统计各类日志的数量
5. 找出最常出现的错误(top 10)
6. 计算错误率(错误日志/总日志)
处理特殊情况:
- 格式不正确的日志行如何处理?
- 日志中含有中文如何处理?
- 超大文件(>1GB)如何优化?
输出:
{
total_lines: int,
error_count: int,
error_rate: float,
by_level: {ERROR: int, WARN: int, ...},
top_errors: [{message, count}, ...],
time_range: {start, end}
}
要求:
- 支持流式处理(处理大文件)
- 性能要求:<5秒处理100MB日志
- 内存占用<100MB
- 支持并行处理
请提供:
1. 核心处理代码
2. 错误处理机制
3. 性能优化方案
4. 单元测试示例
示例4: 业务规则编码
Prompt:
实现电商系统的价格计算引擎。
规则:
1. 基础定价:product.base_price
2. 会员折扣:
- VIP: 8折
- 金卡: 9折
- 普通: 无折扣
3. 促销规则:
- 满100减10
- 满200减30
- 同时最多只能使用2个促销
4. 优惠券:
- 可以和促销叠加
- 优惠券类型:固定金额、百分比、免运费
- 需要验证优惠券是否过期和库存
5. 运费:
- 默认10元
- 满50元免运费
- 不同地区运费不同(加1-5元)
输入:
{
items: [{product_id, quantity, base_price}, ...],
user_level: "VIP" | "金卡" | "普通",
coupon_codes: [string, ...],
region: string,
promotions: [string, ...] (促销代码)
}
输出:
{
subtotal: 商品总额,
member_discount: 会员折扣,
promotion_discount: 促销折扣,
coupon_discount: 优惠券折扣,
shipping: 运费,
tax: 税费,
total: 最终价格,
breakdown: {...} (详细明细)
}
规则优先级:
- 如果有冲突,用配置决定
- 同一类型的优惠可以叠加吗?
- 最终价格不能低于成本价
请实现:
1. 价格计算引擎(支持规则管理)
2. 各种折扣的应用
3. 验证和边界检查
4. 详细的计算明细
5. 配置示例和测试用例
示例5: 错误处理机制
Prompt:
为一个API实现完善的错误处理。
应该处理的错误类型:
1. 业务错误:
- 用户不存在
- 余额不足
- 资源已被删除
- 权限不足
2. 验证错误:
- 输入格式错误
- 参数缺失
- 数据类型不匹配
3. 系统错误:
- 数据库连接失败
- 超时
- 外部服务不可用
- 内存不足
4. 并发错误:
- 数据竞争(如转账中重复处理)
- 死锁
对于每种错误,应该:
1. 返回合适的HTTP状态码
2. 提供清晰的错误消息
3. 包含可操作的建议(什么时候重试,如何修复)
4. 记录错误日志(用于调试)
5. 报警(严重错误要通知)
错误响应格式:
{
error_code: "USER_NOT_FOUND",
message: "用户ID 123 不存在",
details: {...},
timestamp: ISO8601,
request_id: "...",
hint: "请检查用户ID是否正确"
}
请实现:
1. 错误分类和映射
2. 错误响应生成
3. 日志和监控
4. 重试策略(什么错误可以重试)
5. 优雅降级(如果某个依赖失败,如何处理)
⚠️ ❌ 常见误区 常见误区
误区1: 信息不充分
❌ 不要:
"写个支付功能"
[没有说明]
- 支付方式(信用卡、钱包、等)
- 支付网关(Stripe、支付宝、等)
- 金额范围
- 汇率处理
✅ 应该:
"用Stripe API实现信用卡支付
- 支持美元和欧元
- 最小1美元,最大10000美元
- 支持分期支付(6/12/24期)
- 需要验证CVV和地址
- 支持webbook处理异步事件"
误区2: 遗漏异常情况
❌ 不要:
只实现快乐路径:
- 成功的情况
忽视异常:
- 网络失败
- 超时
- 并发冲突
✅ 应该:
明确处理所有异常:
- 超时重试3次
- 数据冲突时使用CAS
- 网络失败时返回具体错误
- 清晰的回滚机制
误区3: 代码质量要求不明确
❌ 不要:
"按照最佳实践写代码"
[不清楚什么是最佳实践]
✅ 应该:
明确代码质量要求:
- 类名使用PascalCase,方法使用camelCase
- 每个函数<50行
- 圈复杂度<10
- 单元测试覆盖率>80%
- 使用类型提示
- 包含docstring
🚀 高级技巧 高级技巧
技巧1: 以TDD方式描述需求
不要只给代码需求,而是给测试用例:
Prompt:
"请实现一个计算器,
基于以下测试用例:
test_addition:
assert calculate('2+3') == 5
assert calculate('0+0') == 0
test_negative:
assert calculate('-5+3') == -2
test_division_by_zero:
assert calculate('1/0') raises ValueError
请基于这些测试实现代码"
技巧2: 要求架构设计
对于复杂功能,先要求设计再要求实现:
Prompt:
"请先设计一下这个支付系统的架构,然后再实现。
设计应该包括:
1. 主要的类和接口
2. 各个组件的职责
3. 数据流
4. 错误处理策略
5. 扩展性考虑
然后实现核心部分"
技巧3: 提供现有代码参考
如果有类似的现有代码,提供参考:
Prompt:
"请实现用户认证功能
参考现有的[现有功能]的实现方式(见下),
保持一致的代码风格和错误处理模式:
[粘贴现有代码片段]
新功能要求:...
"
📋 📌 实现检查清单 检查清单
📄 🎓 下一步 其他
实现完成后:
- T05: Unit Test Generation - 编写单元测试
- T07: Code Review Assistant - 请求代码审查
- T03: Bug Diagnosis - 如果有bug要排查
💬 Prompt 模板 (9)
功能实现 - Prompt 1
用Python写一个订单处理模块。
需求:
- 功能: 验证订单信息,计算总价,创建订单
- 输入:
{
user_id: int,
items: [{product_id, quantity, price}, ...],
coupon_code: string (可选),
shipping_address: {country, postal_code, ...}
}
- 输出: {order_id, total_price, tax, status}
验证规则:
1. 商品数量必须>0
2. 支持的国家列表: [美国,加拿大,英国,日本]
3. 如果使用优惠券,需要验证有效性和适用范围
价格计算:
- 商品总额 + 税费(按国家不同) + 运费 - 优惠券折扣
- 如果订单>100美元,免运费
错误处理:
- 商品ID不存在 → 返回具体错误
- 优惠券失效 → 返回错误但仍可以继续
- 国家不支持 → 返回错误,不创建订单
约束:
- 必须支持事务(要么全部成功要么全部失败)
- 要能处理并发订单
- 响应时间<200ms
请提供:
1. OrderProcessor类定义
2. 完整的价格计算逻辑
3. 错误处理和验证
4. 一个end-to-end的使用示例
5. 单元测试框架(不需要完整实现)
功能实现 - Prompt 2
使用FastAPI实现一个用户管理API。
端点规范:
1. POST /api/users - 创建用户
请求: {name, email, password, role}
响应: {id, name, email, created_at} (201)
2. GET /api/users/{id} - 获取用户
响应: {id, name, email, role, status}
3. PATCH /api/users/{id} - 更新用户
请求: {name?, email?, role?}
响应: 更新后的用户信息
4. DELETE /api/users/{id} - 删除用户
响应: 204 No Content
要求:
- 所有端点需要JWT认证(除了创建用户前可以注册)
- 邮箱必须唯一,不能重复
- 密码存储必须加密(使用bcrypt)
- 支持分页(可选的limit和offset)
- 错误响应格式统一: {error: string, code: string, details?: object}
- API需要数据验证(邮箱格式、密码强度等)
- 删除用户需要管理员权限
- 记录所有操作日志
异常处理:
- 用户已存在 → 409 Conflict
- 找不到用户 → 404 Not Found
- 权限不足 → 403 Forbidden
- 输入无效 → 422 Unprocessable Entity
请生成:
1. FastAPI应用的主要代码
2. 模型定义(Pydantic)
3. 数据库操作(使用SQLAlchemy)
4. 认证中间件
5. 错误处理和验证
6. 一个完整的使用示例(curl命令)
功能实现 - Prompt 3
实现一个日志分析功能。
输入:
- 应用日志文件(每行一条日志)
- 日志格式: [时间] [级别] [模块] 消息
需要实现:
1. 解析日志,提取字段
2. 按时间范围过滤
3. 按级别分类(ERROR, WARN, INFO, DEBUG)
4. 统计各类日志的数量
5. 找出最常出现的错误(top 10)
6. 计算错误率(错误日志/总日志)
处理特殊情况:
- 格式不正确的日志行如何处理?
- 日志中含有中文如何处理?
- 超大文件(>1GB)如何优化?
输出:
{
total_lines: int,
error_count: int,
error_rate: float,
by_level: {ERROR: int, WARN: int, ...},
top_errors: [{message, count}, ...],
time_range: {start, end}
}
要求:
- 支持流式处理(处理大文件)
- 性能要求:<5秒处理100MB日志
- 内存占用<100MB
- 支持并行处理
请提供:
1. 核心处理代码
2. 错误处理机制
3. 性能优化方案
4. 单元测试示例
功能实现 - Prompt 4
实现电商系统的价格计算引擎。
规则:
1. 基础定价:product.base_price
2. 会员折扣:
- VIP: 8折
- 金卡: 9折
- 普通: 无折扣
3. 促销规则:
- 满100减10
- 满200减30
- 同时最多只能使用2个促销
4. 优惠券:
- 可以和促销叠加
- 优惠券类型:固定金额、百分比、免运费
- 需要验证优惠券是否过期和库存
5. 运费:
- 默认10元
- 满50元免运费
- 不同地区运费不同(加1-5元)
输入:
{
items: [{product_id, quantity, base_price}, ...],
user_level: "VIP" | "金卡" | "普通",
coupon_codes: [string, ...],
region: string,
promotions: [string, ...] (促销代码)
}
输出:
{
subtotal: 商品总额,
member_discount: 会员折扣,
promotion_discount: 促销折扣,
coupon_discount: 优惠券折扣,
shipping: 运费,
tax: 税费,
total: 最终价格,
breakdown: {...} (详细明细)
}
规则优先级:
- 如果有冲突,用配置决定
- 同一类型的优惠可以叠加吗?
- 最终价格不能低于成本价
请实现:
1. 价格计算引擎(支持规则管理)
2. 各种折扣的应用
3. 验证和边界检查
4. 详细的计算明细
5. 配置示例和测试用例
功能实现 - Prompt 5
为一个API实现完善的错误处理。
应该处理的错误类型:
1. 业务错误:
- 用户不存在
- 余额不足
- 资源已被删除
- 权限不足
2. 验证错误:
- 输入格式错误
- 参数缺失
- 数据类型不匹配
3. 系统错误:
- 数据库连接失败
- 超时
- 外部服务不可用
- 内存不足
4. 并发错误:
- 数据竞争(如转账中重复处理)
- 死锁
对于每种错误,应该:
1. 返回合适的HTTP状态码
2. 提供清晰的错误消息
3. 包含可操作的建议(什么时候重试,如何修复)
4. 记录错误日志(用于调试)
5. 报警(严重错误要通知)
错误响应格式:
{
error_code: "USER_NOT_FOUND",
message: "用户ID 123 不存在",
details: {...},
timestamp: ISO8601,
request_id: "...",
hint: "请检查用户ID是否正确"
}
请实现:
1. 错误分类和映射
2. 错误响应生成
3. 日志和监控
4. 重试策略(什么错误可以重试)
5. 优雅降级(如果某个依赖失败,如何处理)
功能实现 - Prompt 6
"用Stripe API实现信用卡支付
- 支持美元和欧元
- 最小1美元,最大10000美元
- 支持分期支付(6/12/24期)
- 需要验证CVV和地址
- 支持webbook处理异步事件"
功能实现 - Prompt 7
不要只给代码需求,而是给测试用例:
Prompt:
"请实现一个计算器,
基于以下测试用例:
test_addition:
assert calculate('2+3') == 5
assert calculate('0+0') == 0
test_negative:
assert calculate('-5+3') == -2
test_division_by_zero:
assert calculate('1/0') raises ValueError
请基于这些测试实现代码"
功能实现 - Prompt 8
对于复杂功能,先要求设计再要求实现:
Prompt:
"请先设计一下这个支付系统的架构,然后再实现。
设计应该包括:
1. 主要的类和接口
2. 各个组件的职责
3. 数据流
4. 错误处理策略
5. 扩展性考虑
然后实现核心部分"
功能实现 - Prompt 9
如果有类似的现有代码,提供参考:
Prompt:
"请实现用户认证功能
参考现有的[现有功能]的实现方式(见下),
保持一致的代码风格和错误处理模式:
[粘贴现有代码片段]
新功能要求:...
"