Best Practices
Optimus CMS development best practices to help you build high-quality, maintainable applications.
Code Organization
模块化架构
- 按功能组织: 将相关代码组织在同一目录下
src/ ├── business/ # 业务模块 │ ├── partner/ # 合伙人模块 │ ├── points/ # 积分模块 │ └── tasks/ # 任务模块 ├── shared/ # 共享代码 │ ├── decorators/ # 装饰器 │ ├── guards/ # 守卫 │ └── utils/ # 工具函数 └── system/ # 系统模块
- 单一职责: 每个模块/类/函数只做一件事情
- 依赖注入: 使用 NestJS 的依赖注入系统
API 设计
RESTful 规范
| 方法 | 路径示例 | 说明 |
|---|---|---|
| GET | /api/users | 获取用户列表 |
| GET | /api/users/:id | 获取单个用户 |
| POST | /api/users | 创建用户 |
| PUT/PATCH | /api/users/:id | 更新用户 |
| DELETE | /api/users/:id | 删除用户 |
统一响应格式
// 成功响应
{
"success": true,
"data": { ... },
"message": "操作成功"
}
// 错误响应
{
"success": false,
"code": "USER_NOT_FOUND",
"message": "用户不存在"
}错误处理
✓ 使用自定义异常
throw new BusinessException('用户不存在', 'USER_NOT_FOUND');✓ 记录详细日志
this.logger.error('创建用户失败', {
error: error.message,
userId: dto.id,
timestamp: new Date().toISOString()
});✓ 使用 try-catch 包装异步操作
try {
const user = await this.userService.create(dto);
return { success: true, data: user };
} catch (error) {
this.logger.error('创建用户失败', error);
throw error;
}数据验证
使用 class-validator
import { IsString, IsEmail, MinLength } from 'class-validator';
export class CreateUserDto {
@IsString()
@MinLength(2)
name: string;
@IsEmail()
email: string;
@IsString()
@MinLength(8)
password: string;
}安全性
- ✓密码加密: 使用 bcrypt 加密存储密码
- ✓JWT 认证: 使用短期 access token + 长期 refresh token
- ✓输入验证: 永远不要信任用户输入,进行严格验证
- ✓SQL 注入防护: 使用 ORM 参数化查询
- ✓CORS 配置: 只允许授权的域名访问
性能优化
数据库查询优化
- • 使用索引提高查询速度
- • 避免 N+1 查询问题,使用 eager loading
- • 分页查询大量数据
- • 使用数据库缓存(Redis)
API 性能
- • 使用 HTTP 缓存头
- • 实现请求限流(Rate Limiting)
- • 压缩响应数据(Gzip)
- • 异步处理耗时任务
测试
测试金字塔
- 单元测试 (70%): 测试单个函数/方法
- 集成测试 (20%): 测试多个模块协作
- E2E 测试 (10%): 测试完整用户流程