开发规范
📚规范概述
为了保证项目代码的一致性、可读性和可维护性,FastapiAdmin 项目制定了以下开发规范。所有参与项目开发的开发者都应该遵循这些规范。
🎨前端开发规范
1. 代码风格
1.1 TypeScript 规范
- 使用 TypeScript 严格模式(
"strict": true) - 为所有变量、函数、接口添加类型注解
- 避免使用
any类型,除非确实无法确定类型 - 使用接口定义对象类型,而不是类型别名
- 使用枚举定义常量集合
- 使用
type定义联合类型和交叉类型 - 使用
as const断言确保类型安全 - 使用
readonly修饰符保护不可变数据 - 使用
unknown类型处理不确定类型的数据
1.2 Vue 规范
- 使用 Composition API
- 使用
<script setup lang="ts">语法 - 组件命名使用 PascalCase
- 变量和函数命名使用 camelCase
- 常量命名使用 UPPER_SNAKE_CASE
- 使用
ref()定义响应式变量 - 使用
computed()定义计算属性 - 使用
watch()或watchEffect()监听变化 - 使用
onMounted()、onUnmounted()等生命周期钩子 - 组件 props 使用
defineProps()定义并添加类型 - 组件事件使用
defineEmits()定义并添加类型 - 组件暴露的属性和方法使用
defineExpose()定义
1.3 CSS 规范
- 使用 UnoCSS 原子化 CSS
- 避免使用内联样式
- 使用 BEM 命名规范(如果不使用 UnoCSS)
- 类名使用 kebab-case
- 避免使用 ID 选择器
- 使用 CSS 变量管理主题
- 避免使用
!important修饰符 - 使用 flexbox 布局确保跨平台一致性
- 合理使用 CSS Grid 布局
- 优化 CSS 选择器优先级
2. 组件开发最佳实践
- 单一职责原则:每个组件只负责一个功能
- props 设计:
- 使用
required和default明确 props 要求 - 为复杂 props 添加验证
- 使用
withDefaults()为 props 设置默认值
- 使用
- 事件设计:
- 使用 kebab-case 命名事件
- 事件参数类型明确
- 避免在事件中传递过多参数
- 插槽设计:
- 使用具名插槽提高可读性
- 为插槽添加默认内容
- 使用作用域插槽传递数据
- 样式设计:
- 使用
scoped样式避免冲突 - 合理使用
:deep()选择器 - 避免在组件中使用全局样式
- 使用
3. 状态管理最佳实践
- 模块化设计:按功能模块拆分 store
- 状态定义:
- 使用
interface定义 state 类型 - 初始化所有状态
- 避免使用嵌套过深的状态结构
- 使用
- Actions 设计:
- 处理异步操作
- 使用 try/catch 捕获错误
- 提交多个 mutations 时使用事务
- Getters 设计:
- 缓存计算结果
- 避免在 getters 中修改状态
- 合理使用参数化 getters
4. API 调用最佳实践
- 模块化管理:按功能模块组织 API 接口
- 请求封装:
- 统一处理请求头
- 统一处理错误
- 统一处理 loading 状态
- 响应处理:
- 类型定义响应数据结构
- 统一处理响应状态码
- 合理处理空数据和边界情况
- 请求优化:
- 使用防抖和节流
- 缓存频繁请求的结果
- 合理使用并发请求
5. 性能优化建议
- 代码分割:使用路由懒加载和组件懒加载
- 资源优化:
- 压缩图片和静态资源
- 使用 WebP 格式图片
- 合理使用 CDN
- 渲染优化:
- 使用
v-memo缓存计算结果 - 合理使用
v-if和v-show - 避免在模板中使用复杂表达式
- 使用
- 网络优化:
- 使用 HTTP/2 或 HTTP/3
- 启用 Gzip 或 Brotli 压缩
- 合理设置缓存策略
6. 测试最佳实践
- 测试分层:单元测试、集成测试、端到端测试
- 测试覆盖率:
- 核心功能 100% 覆盖
- 复杂逻辑 80% 以上覆盖
- 简单功能 50% 以上覆盖
- 测试工具:
- 使用 Vitest 进行单元测试
- 使用 Playwright 进行端到端测试
- 使用 Vue Test Utils 进行组件测试
7. 代码审查要点
- 类型安全:检查 TypeScript 类型定义是否正确
- 代码质量:检查代码是否简洁、清晰
- 性能问题:检查是否存在性能瓶颈
- 安全问题:检查是否存在安全漏洞
- 规范遵循:检查是否遵循项目开发规范
🐍后端开发规范
1. 代码风格
1.1 Python 规范
- 遵循 PEP 8 代码风格
- 使用 4 个空格缩进
- 行长度不超过 100 字符
- 函数和类之间空两行
- 方法之间空一行
- 导入语句按标准库、第三方库、本地库分组
1.2 FastAPI 规范
- 使用 FastAPI 装饰器定义路由
- 使用 Pydantic 模型定义请求和响应数据
- 使用依赖注入处理认证和权限
- 使用路径参数和查询参数
- 使用 HTTPException 处理错误
- 使用 Depends 注入依赖
2. 目录结构
backend/app/
├── api/ # API 接口
├── common/ # 公共代码
├── config/ # 配置管理
├── core/ # 核心功能
├── plugin/ # 插件系统
├── scripts/ # 脚本工具
└── utils/ # 工具函数3. 插件开发规范
- 插件目录应该以
module_开头 - 插件应该包含
controller.py、model.py、schema.py、service.py、crud.py等文件 - 控制器应该使用
APIRouter定义路由 - 路由前缀应该与模块名对应(module_xxx -> /xxx)
- 控制器应该使用
OperationLogRoute记录操作日志 - 接口应该使用
AuthPermission进行权限控制
4. 数据库规范
- 使用 SQLAlchemy 2.0 ORM
- 使用 Alembic 进行数据库迁移
- 模型类应该继承自
Base - 模型类应该定义
__tablename__属性 - 字段命名应该使用 snake_case
- 表名应该使用 snake_case 复数形式
- 外键应该使用
ForeignKey定义 - 关系应该使用
relationship定义
5. 认证和权限规范
- 使用 JWT 进行身份认证
- 使用 RBAC 模型进行权限管理
- 接口应该添加权限控制装饰器
- 权限字符串格式:
module:controller:action - 权限应该在角色管理中配置
6. 错误处理规范
- 使用
HTTPException处理 HTTP 错误 - 使用自定义异常处理全局错误
- 错误响应应该有统一的格式
- 错误应该记录到日志
7. 日志规范
- 使用 Python 标准库
logging模块 - 日志级别:DEBUG、INFO、WARNING、ERROR、CRITICAL
- 日志应该包含时间、级别、模块、消息等信息
- 关键操作应该记录日志
- 错误应该记录详细信息
📦FastApp 移动端开发规范
1. 代码风格
- 遵循前端开发规范
- 使用 TypeScript 严格模式
- 使用 Vue 3 Composition API
- 使用
<script setup lang="ts">语法 - 组件命名使用 PascalCase
- 变量和函数命名使用 camelCase
2. 目录结构
FastApp/src/
├── api/ # API 接口
├── components/ # 组件
├── composables/ # 组合式函数
├── constants/ # 常量定义
├── enums/ # 枚举定义
├── layouts/ # 布局组件
├── pages/ # 页面文件
├── router/ # 路由配置
├── static/ # 静态资源
├── store/ # 状态管理
├── styles/ # 样式文件
├── types/ # TypeScript 类型定义
├── utils/ # 工具函数
├── App.vue # 应用根组件
└── main.ts # 应用入口文件3. 页面开发规范
- 页面组件应该放在
pages目录下 - 页面目录应该使用 kebab-case
- 页面组件应该包含
index.vue文件 - 页面组件可以包含
data.ts、types.ts等辅助文件 - 页面组件应该使用
onLoad()、onShow()等生命周期钩子 - 页面跳转应该使用
uni.navigateTo()、uni.switchTab()等 API
4. API 调用规范
- 遵循前端 API 调用规范
- 使用封装的
request.ts工具 - API 接口应该按模块分类
- API 调用应该处理错误情况
- API 调用应该显示加载状态
5. 跨平台适配规范
- 使用条件编译处理平台差异
- 使用
#ifdef、#ifndef、#endif指令 - 平台特有 API 应该添加条件编译
- 样式应该考虑不同平台的差异
- 布局应该使用 flexbox 确保跨平台一致性
🎯Git 提交规范
1. 分支管理
master:主分支,用于发布生产版本dev:开发分支,用于集成开发feature/xxx:功能分支,用于开发新功能bugfix/xxx:修复分支,用于修复 bughotfix/xxx:热修复分支,用于紧急修复生产环境问题
2. 提交信息规范
提交信息应该遵循以下格式:
<type>(<scope>): <subject>
<body>
<footer>2.1 Type
feat:新功能fix:修复 bugdocs:文档修改style:代码风格修改refactor:代码重构test:测试代码修改chore:构建工具或依赖修改revert:回滚提交
2.2 Scope
- 可选,用于指定修改的范围
- 例如:
api、component、page、store等
2.3 Subject
- 简短的提交信息,不超过 50 个字符
- 使用祈使句,动词开头
- 首字母小写
- 不需要句号结尾
2.4 Body
- 可选,详细的提交信息
- 每行不超过 72 个字符
- 解释为什么修改,而不是如何修改
2.5 Footer
- 可选,用于引用 issue 或 BUG
- 例如:
Closes #123、Fixes #456
3. 提交示例
feat(api): 添加用户登录接口
- 实现用户登录功能
- 添加 JWT 认证
- 处理登录错误情况
Closes #123fix(frontend): 修复首页轮播图显示问题
- 修复轮播图高度计算错误
- 优化轮播图切换动画
Fixes #456docs: 更新开发文档
- 添加 API 文档说明
- 完善部署指南4. Pull Request 规范
- Pull Request 应该从功能分支合并到 dev 分支
- Pull Request 标题应该清晰、语义化
- Pull Request 描述应该详细说明修改内容
- Pull Request 应该包含相关的 issue 链接
- Pull Request 应该通过所有测试
- Pull Request 应该由至少一个 reviewer 审核
🔧工具链规范
1. 前端工具链
- 使用 Vite 作为构建工具
- 使用 ESLint 进行代码检查
- 使用 Prettier 进行代码格式化
- 使用 Stylelint 进行样式检查
- 使用 Husky 进行 Git 钩子管理
- 使用 Commitlint 进行提交信息检查
2. 后端工具链
- 使用 Poetry 或 pip 管理依赖
- 使用 Pylint 或 Flake8 进行代码检查
- 使用 Black 进行代码格式化
- 使用 MyPy 进行类型检查
- 使用 pytest 进行测试
💡开发流程规范
1. 需求分析
- 明确功能需求
- 分析业务逻辑
- 确定技术方案
2. 设计阶段
- 设计数据库表结构
- 设计 API 接口
- 设计前端页面
- 设计组件结构
3. 开发阶段
- 创建分支
- 实现功能
- 编写测试
- 运行测试
4. 测试阶段
- 单元测试
- 集成测试
- 端到端测试
- 性能测试
5. 部署阶段
- 构建生产版本
- 部署到测试环境
- 进行回归测试
- 部署到生产环境
6. 维护阶段
- 监控系统运行状态
- 处理 bug 和问题
- 进行性能优化
- 进行功能迭代
📚参考资料
- TypeScript 官方文档
- Vue 官方文档
- FastAPI 官方文档
- SQLAlchemy 官方文档
- PEP 8 代码风格指南
- Conventional Commits
- ESLint 官方文档
- Prettier 官方文档
🤝贡献指南
如果您对开发规范有任何建议或改进意见,欢迎提交 Issue 或 Pull Request。我们会认真考虑每一个建议,不断完善开发规范。
📄许可协议
本开发规范文档采用 MIT 许可协议,与 FastapiAdmin 项目保持一致。
