# 解班客项目开发规范和最佳实践
## 📋 文档概述
本文档制定了解班客项目的开发规范、编码标准和最佳实践,旨在提高代码质量、团队协作效率和项目可维护性。
### 文档目标
- 建立统一的代码规范和编码标准
- 规范开发流程和团队协作方式
- 提高代码质量和可维护性
- 确保项目的长期稳定发展
## 🎯 开发原则
### 核心原则
1. **可读性优先**:代码应该易于理解和维护
2. **一致性**:遵循统一的编码风格和命名规范
3. **简洁性**:避免过度设计,保持代码简洁
4. **可测试性**:编写易于测试的代码
5. **安全性**:始终考虑安全因素
6. **性能意识**:在保证功能的前提下优化性能
### SOLID原则
- **S** - 单一职责原则(Single Responsibility Principle)
- **O** - 开闭原则(Open/Closed Principle)
- **L** - 里氏替换原则(Liskov Substitution Principle)
- **I** - 接口隔离原则(Interface Segregation Principle)
- **D** - 依赖倒置原则(Dependency Inversion Principle)
## 📁 项目结构规范
### 后端项目结构
```
backend/
├── src/
│ ├── controllers/ # 控制器层
│ │ ├── admin/ # 管理员控制器
│ │ └── user/ # 用户控制器
│ ├── models/ # 数据模型层
│ ├── routes/ # 路由层
│ │ ├── admin/ # 管理员路由
│ │ └── user/ # 用户路由
│ ├── middleware/ # 中间件
│ ├── services/ # 业务逻辑层
│ ├── utils/ # 工具函数
│ ├── config/ # 配置文件
│ └── validators/ # 数据验证
├── tests/ # 测试文件
│ ├── unit/ # 单元测试
│ ├── integration/ # 集成测试
│ └── fixtures/ # 测试数据
├── docs/ # API文档
├── scripts/ # 脚本文件
└── package.json
```
### 前端项目结构
```
frontend/
├── src/
│ ├── components/ # 公共组件
│ │ ├── common/ # 通用组件
│ │ └── business/ # 业务组件
│ ├── views/ # 页面组件
│ │ ├── admin/ # 管理员页面
│ │ └── user/ # 用户页面
│ ├── stores/ # Pinia状态管理
│ ├── composables/ # 组合式函数
│ ├── utils/ # 工具函数
│ ├── api/ # API接口
│ ├── router/ # 路由配置
│ ├── assets/ # 静态资源
│ └── styles/ # 样式文件
├── public/ # 公共资源
├── tests/ # 测试文件
└── package.json
```
frontend/
├── src/
│ ├── components/ # 公共组件
│ │ ├── common/ # 通用组件
│ │ └── business/ # 业务组件
│ ├── views/ # 页面视图
│ │ ├── user/ # 用户相关页面
│ │ ├── animal/ # 动物相关页面
│ │ └── admin/ # 管理页面
│ ├── stores/ # 状态管理
│ ├── router/ # 路由配置
│ ├── utils/ # 工具函数
│ ├── api/ # API接口
│ ├── assets/ # 静态资源
│ │ ├── images/ # 图片资源
│ │ ├── styles/ # 样式文件
│ │ └── icons/ # 图标资源
│ └── composables/ # 组合式函数
├── public/ # 公共文件
├── tests/ # 测试文件
└── package.json
```
## 🔤 命名规范
### 文件和目录命名
- **文件名**: 使用小写字母和连字符 (`kebab-case`)
```
✅ user-management.js
✅ animal-list.vue
❌ UserManagement.js
❌ animalList.vue
```
- **目录名**: 使用小写字母和连字符
```
✅ user-management/
✅ api-docs/
❌ UserManagement/
❌ apiDocs/
```
### 变量和函数命名
#### JavaScript/Node.js
- **变量**: 使用驼峰命名法 (`camelCase`)
- **常量**: 使用大写字母和下划线 (`UPPER_SNAKE_CASE`)
- **函数**: 使用驼峰命名法,动词开头
- **类**: 使用帕斯卡命名法 (`PascalCase`)
```javascript
// ✅ 正确示例
const userName = 'john';
const MAX_RETRY_COUNT = 3;
const API_BASE_URL = 'https://api.example.com';
function getUserById(id) { }
function createAnimalRecord(data) { }
class UserService { }
class AnimalController { }
// ❌ 错误示例
const user_name = 'john';
const maxretrycount = 3;
function GetUserById(id) { }
class userService { }
```
#### Vue.js组件
- **组件名**: 使用帕斯卡命名法
- **Props**: 使用驼峰命名法
- **事件**: 使用kebab-case
```vue
```
### 数据库命名
- **表名**: 使用复数形式,下划线分隔
- **字段名**: 使用下划线分隔
- **索引名**: 使用 `idx_` 前缀
- **外键名**: 使用 `fk_` 前缀
```sql
-- ✅ 正确示例
CREATE TABLE users (
id INT PRIMARY KEY,
user_name VARCHAR(50),
email_address VARCHAR(100),
created_at TIMESTAMP,
updated_at TIMESTAMP
);
CREATE INDEX idx_users_email ON users(email_address);
ALTER TABLE adoptions ADD CONSTRAINT fk_adoptions_user_id
FOREIGN KEY (user_id) REFERENCES users(id);
```
## 💻 代码风格规范
### JavaScript/Node.js代码规范
#### 基本格式
```javascript
// ✅ 使用2个空格缩进
if (condition) {
doSomething();
}
// ✅ 使用单引号
const message = 'Hello World';
// ✅ 对象和数组的格式
const user = {
name: 'John',
age: 30,
email: 'john@example.com'
};
const animals = [
'dog',
'cat',
'bird'
];
// ✅ 函数声明
function calculateAge(birthDate) {
const today = new Date();
const birth = new Date(birthDate);
return today.getFullYear() - birth.getFullYear();
}
// ✅ 箭头函数
const getFullName = (firstName, lastName) => `${firstName} ${lastName}`;
```
#### 注释规范
```javascript
/**
* 获取用户信息
* @param {number} userId - 用户ID
* @param {Object} options - 查询选项
* @param {boolean} options.includeProfile - 是否包含个人资料
* @returns {Promise