docs: add coding standards and review checklist

feature/20260628/refactor-frontend-modernization
Lxy 3 weeks ago
parent fbd205dbd1
commit 32b758fb21

@ -0,0 +1,48 @@
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name="Checker">
<property name="charset" value="UTF-8"/>
<property name="severity" value="warning"/>
<module name="TreeWalker">
<!-- 命名规范 -->
<module name="ConstantName"/>
<module name="LocalFinalVariableName"/>
<module name="LocalVariableName"/>
<module name="MemberName"/>
<module name="MethodName"/>
<module name="PackageName"/>
<module name="ParameterName"/>
<module name="StaticVariableName"/>
<module name="TypeName"/>
<!-- 导入规范 -->
<module name="AvoidStarImport"/>
<module name="IllegalImport"/>
<module name="RedundantImport"/>
<module name="UnusedImports"/>
<!-- 长度限制 -->
<module name="LineLength">
<property name="max" value="120"/>
</module>
<module name="MethodLength">
<property name="max" value="50"/>
</module>
<!-- 空格 -->
<module name="EmptyLineSeparator"/>
<module name="GenericWhitespace"/>
<module name="MethodParamPad"/>
<module name="NoWhitespaceAfter"/>
<module name="NoWhitespaceBefore"/>
<module name="OperatorWrap"/>
<module name="ParenPad"/>
<module name="TypecastParenPad"/>
<module name="WhitespaceAfter"/>
<module name="WhitespaceAround"/>
</module>
</module>

@ -0,0 +1,31 @@
# RuoYi-Vue 编码规范
## 文档清单
1. [Java 编码规范](java-coding-standards.md)
2. [前端编码规范](frontend-coding-standards.md)
3. [Git 提交规范](git-commit-standards.md)
4. [Code Review 检查清单](code-review-checklist.md)
## 快速开始
### 前端开发
```bash
cd ruoyi-ui-next
npm install
npm run lint # 检查代码规范
npm run format # 格式化代码
```
### 后端开发
```bash
# 使用 IDE 插件
# - IntelliJ: Checkstyle-IDEA 插件
# - VS Code: Checkstyle for Java 插件
```
## 工具配置
- 前端ESLint + Prettier + Husky
- 后端Checkstyle + SpotBugs
- GitCommitlint + Husky

@ -0,0 +1,42 @@
# RuoYi-Vue Code Review 检查清单
## 1. 代码质量
- [ ] 代码是否遵循编码规范?
- [ ] 命名是否清晰有意义?
- [ ] 方法是否过长(>50 行)?
- [ ] 类是否过大(>500 行)?
- [ ] 是否有重复代码?
## 2. 功能正确性
- [ ] 功能是否按需求实现?
- [ ] 边界条件是否处理?
- [ ] 异常处理是否完整?
- [ ] 是否有潜在 Bug
## 3. 性能
- [ ] 是否有性能问题?
- [ ] 数据库查询是否优化?
- [ ] 是否有不必要的循环?
- [ ] 缓存使用是否合理?
## 4. 安全
- [ ] 是否有 SQL 注入风险?
- [ ] 是否有 XSS 攻击风险?
- [ ] 敏感信息是否加密?
- [ ] 权限校验是否完整?
## 5. 测试
- [ ] 是否有单元测试?
- [ ] 测试覆盖率是否足够?
- [ ] 测试用例是否覆盖边界条件?
## 6. 文档
- [ ] 是否更新了相关文档?
- [ ] API 注释是否完整?
- [ ] 复杂逻辑是否有注释说明?

@ -0,0 +1,118 @@
# RuoYi-Vue 前端编码规范
## 1. 命名规范
### 1.1 文件命名
- Vue 组件PascalCase`UserList.vue`
- TypeScript 文件camelCase`userApi.ts`
- 样式文件kebab-case`user-list.scss`
### 1.2 组件命名
- 使用多单词,避免与 HTML 元素冲突:`UserList`、`AccountCard`
- 使用 PascalCase`<template><UserList /></template>`
### 1.3 变量命名
- 使用 camelCase`const userList = ref([])`
- 常量使用 UPPER_SNAKE_CASE`const MAX_PAGE_SIZE = 100`
## 2. Vue 组件规范
### 2.1 组件结构
```vue
<template>
<div class="user-list">
<!-- 模板内容 -->
</div>
</template>
<script setup lang="ts">
// 导入
import { ref, reactive, onMounted } from 'vue'
// 类型定义
interface User {
id: number
name: string
}
// Props 定义
const props = defineProps<{
userId: number
}>()
// Emits 定义
const emit = defineEmits<{
(e: 'update', user: User): void
}>()
// 响应式数据
const userList = ref<User[]>([])
const loading = ref(false)
// 计算属性
const totalCount = computed(() => userList.value.length)
// 方法
async function fetchUsers() {
loading.value = true
try {
// ...
} finally {
loading.value = false
}
}
// 生命周期
onMounted(() => {
fetchUsers()
})
</script>
<style scoped lang="scss">
.user-list {
// 样式
}
</style>
```
### 2.2 Composition API
- 优先使用 `<script setup>` 语法
- 使用 TypeScript 类型注解
- 响应式数据使用 `ref``reactive`
## 3. TypeScript 规范
### 3.1 类型定义
```typescript
// 接口定义
export interface User {
id: number
name: string
email?: string
}
// 类型别名
export type UserStatus = 'active' | 'inactive' | 'deleted'
```
### 3.2 避免 any
- 不使用 `any` 类型
- 使用 `unknown` 代替
## 4. 样式规范
### 4.1 使用 scoped
- 所有组件样式使用 `scoped`
- 避免全局样式污染
### 4.2 CSS 变量
- 使用项目定义的 CSS 变量
- 不使用硬编码颜色值
## 5. 最佳实践
- 组件不超过 300 行
- 方法不超过 50 行
- 使用可选链 `?.` 和空值合并 `??`
- 优先使用 `const`,必要时使用 `let`
- 不使用 `var`

@ -0,0 +1,61 @@
# RuoYi-Vue Git 提交规范
## 1. Conventional Commits
### 1.1 格式
```
<type>(<scope>): <subject>
<body>
<footer>
```
### 1.2 Type 类型
- `feat`: 新功能
- `fix`: Bug 修复
- `docs`: 文档更新
- `style`: 代码格式(不影响代码运行)
- `refactor`: 重构
- `perf`: 性能优化
- `test`: 测试相关
- `build`: 构建系统或外部依赖
- `ci`: CI 配置文件
- `chore`: 其他修改
- `revert`: 回滚提交
### 1.3 示例
```bash
# 新功能
feat(user): add user export function
# Bug 修复
fix(login): fix 401 error on token expiration
# 文档更新
docs(api): update API documentation
# 重构
refactor(user): refactor user service layer
# 性能优化
perf(query): optimize database query performance
```
## 2. 分支管理
### 2.1 分支命名
- 功能分支:`feature/YYYYMMDD/feature-name`
- 修复分支:`hotfix/YYYYMMDD/bug-name`
- 重构分支:`refactor/YYYYMMDD/module-name`
### 2.2 分支策略
- `main`: 生产环境代码
- `develop`: 开发环境代码
- `feature/*`: 功能开发分支
- `hotfix/*`: 紧急修复分支
## 3. 提交频率
- 每个功能点至少 1 次提交
- 不要累积大量未提交代码
- 提交信息清晰明了

@ -0,0 +1,111 @@
# RuoYi-Vue Java 编码规范
## 1. 命名规范
### 1.1 类名
- 使用大驼峰命名PascalCase
- 示例:`SysUserController`、`AccountServiceImpl`
### 1.2 方法名
- 使用小驼峰命名camelCase
- 动词开头:`getUserList`、`addUser`、`deleteUser`
### 1.3 变量名
- 使用小驼峰命名
- 布尔类型使用 is/has/can 前缀:`isEnabled`、`hasPermission`
### 1.4 常量名
- 全大写,下划线分隔:`MAX_PAGE_SIZE`、`DEFAULT_STATUS`
### 1.5 包名
- 全小写,点分隔:`com.ruoyi.system.controller`
## 2. 注释规范
### 2.1 类注释
```java
/**
* 用户管理 Controller
*
* @author ruoyi
* @since 2026-06-28
*/
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
```
### 2.2 方法注释
```java
/**
* 查询用户列表
*
* @param user 用户查询条件
* @return 用户列表分页数据
*/
@ApiOperation("查询用户列表")
@GetMapping("/list")
public TableDataInfo list(SysUser user) {
startPage();
List<SysUser> list = userService.selectUserList(user);
return getDataTable(list);
}
```
## 3. 代码格式
### 3.1 缩进
- 使用 4 个空格缩进
- 不使用 Tab
### 3.2 行长度
- 每行不超过 120 字符
### 3.3 空行
- 方法之间留 1 个空行
- 逻辑块之间留 1 个空行
## 4. 异常处理
### 4.1 业务异常
```java
if (user == null) {
throw new ServiceException("用户不存在", HttpStatus.USER_NOT_FOUND);
}
```
### 4.2 不要吞没异常
```java
// ✗ 错误
try {
// ...
} catch (Exception e) {
// 空 catch
}
// ✓ 正确
try {
// ...
} catch (Exception e) {
log.error("操作失败: {}", e.getMessage(), e);
throw new ServiceException("操作失败");
}
```
## 5. 事务管理
### 5.1 事务注解
```java
@Transactional(rollbackFor = Exception.class)
public void addUser(SysUser user) {
// ...
}
```
## 6. 最佳实践
- 使用 `@Autowired` 构造器注入
- 优先使用 `final` 修饰不可变字段
- 避免魔法数字,使用常量
- 方法不超过 50 行
- 类不超过 500 行
Loading…
Cancel
Save