Skip to content

项目结构与开发规范 ​

北冥坞学件基座系统一共包含如下五个子项目:

  • 系统引擎:实现了学件范式中的核心组件和算法,并提供了一个基于命令行的客户端以便于用户交互,同时将其作为 learnware 包发布。
  • 系统前端:提供了用户与系统交互的界面和功能,包括主系统和管理员系统。
  • 系统后端:负责处理系统的运行逻辑和数据操作,确保系统的稳定性和高性能。
  • 系统文档:维护系统的文档,包括用户指南、开发指南等,确保系统的易用性。
  • 系统部署:负责管理系统的部署配置,包括前后端的部署文件。

其中「系统引擎」实现于独立的 Learnware 代码仓库中,并配置了独立的项目文档。

其余四个子项目则实现于 Beimingwu 代码仓库中,并采用 Monorepo 的方式进行管理。下文将介绍 Beimingwu 代码仓库的具体结构与开发规范。

Beimingwu 项目结构 ​

Beimingwu 代码仓库包含前端、后端、系统部署、系统文档四个子项目,项目间各自独立。

前端项目结构 ​

shell
├── frontend # 前端项目
    ├── README.md # 前端说明
    ├── package.json
    ├── packages 
    │   ├── admin # 管理端模块
    │   │   ├── README.md
    │   │   ├── index.html
    │   │   ├── package.json
    │   │   ├── postcss.config.js
    │   │   ├── public # 图片
    │   │   ├── src # 代码
    │   ├── hooks # commit 检查
    │   ├── locale # 语言切换相关
    │   │   ├── package.json
    │   │   ├── src
    │   │   │   ├── en # 英文文字
    │   │   │   ├── index.ts
    │   │   │   └── zh-cn # 中文文字
    │   │   ├── tsconfig.json
    │   │   └── tsup.config.ts
    │   ├── main # 前端模块
    │   │   ├── index.html
    │   │   ├── package.json
    │   │   ├── postcss.config.js
    │   │   ├── public # 图片
    │   │   ├── src # 代码
    │   │   └── vite.config.ts # 项目配置
    │   └── types # 前端通用类型
├── frontend # 前端项目
    ├── README.md # 前端说明
    ├── package.json
    ├── packages 
    │   ├── admin # 管理端模块
    │   │   ├── README.md
    │   │   ├── index.html
    │   │   ├── package.json
    │   │   ├── postcss.config.js
    │   │   ├── public # 图片
    │   │   ├── src # 代码
    │   ├── hooks # commit 检查
    │   ├── locale # 语言切换相关
    │   │   ├── package.json
    │   │   ├── src
    │   │   │   ├── en # 英文文字
    │   │   │   ├── index.ts
    │   │   │   └── zh-cn # 中文文字
    │   │   ├── tsconfig.json
    │   │   └── tsup.config.ts
    │   ├── main # 前端模块
    │   │   ├── index.html
    │   │   ├── package.json
    │   │   ├── postcss.config.js
    │   │   ├── public # 图片
    │   │   ├── src # 代码
    │   │   └── vite.config.ts # 项目配置
    │   └── types # 前端通用类型

后端项目结构 ​

shell
├── backend # 后端项目
    ├── README.md # 后端说明文档
    ├── config.py # 后端配置
    ├── context.py # 后端全局变量
    ├── database # 数据库目录
    │   ├── __init__.py
    │   ├── base.py  # 数据库基类
    │   └── sqlalchemy.py # 基于sqlalchemy的数据库实现
    ├── lib # 各类工具
    │   ├── command_executor.py # 命令行相关
    │   ├── common_utils.py # 通用
    │   ├── data_utils.py # 数据相关
    │   ├── database_operations.py #数据库相关操作
    │   ├── engine.py # 学件引擎相关工具
    │   └── redis_utils.py # redis相关
    ├── requirements.txt # 
    ├── restful # web接口
    │   ├── admin.py # 管理员相关接口
    │   ├── auth.py # 用户认证
    │   ├── common_functions.py # 通用函数
    │   ├── engine.py # 引擎接口
    │   ├── user.py # 用户操作接口
    │   └── utils.py # 工具函数,如发邮件等
    ├── scripts # 各类脚本
    │   ├── backup_data.py # 备份数据
    │   ├── main.py # web入口
    │   └── monitor_learnware_verify.py # 学件检查脚本
    ├── tests # 测试相关代码
        ├── common_test_operations.py # 通用测试函数
        ├── data  # 测试相关数据
        ├── stress_test # 压力测试
        ├── test_admin.py # 管理员接口测试
        ├── test_auth.py # 用户认证测试
        ├── test_backup_data.py # 备份数据测试
        ├── test_command_executor.py # 测试命令执行
        ├── test_engine.py # 测试引擎接口
        ├── test_learnware_client.py # 测试学件客户端
        ├── test_monitor_learnware_verify.py # 测试学件检查脚本
        ├── test_user.py # 测试用户相关接口
        └── test_verify_learnware.py # 测试单个学件检查
├── backend # 后端项目
    ├── README.md # 后端说明文档
    ├── config.py # 后端配置
    ├── context.py # 后端全局变量
    ├── database # 数据库目录
    │   ├── __init__.py
    │   ├── base.py  # 数据库基类
    │   └── sqlalchemy.py # 基于sqlalchemy的数据库实现
    ├── lib # 各类工具
    │   ├── command_executor.py # 命令行相关
    │   ├── common_utils.py # 通用
    │   ├── data_utils.py # 数据相关
    │   ├── database_operations.py #数据库相关操作
    │   ├── engine.py # 学件引擎相关工具
    │   └── redis_utils.py # redis相关
    ├── requirements.txt # 
    ├── restful # web接口
    │   ├── admin.py # 管理员相关接口
    │   ├── auth.py # 用户认证
    │   ├── common_functions.py # 通用函数
    │   ├── engine.py # 引擎接口
    │   ├── user.py # 用户操作接口
    │   └── utils.py # 工具函数,如发邮件等
    ├── scripts # 各类脚本
    │   ├── backup_data.py # 备份数据
    │   ├── main.py # web入口
    │   └── monitor_learnware_verify.py # 学件检查脚本
    ├── tests # 测试相关代码
        ├── common_test_operations.py # 通用测试函数
        ├── data  # 测试相关数据
        ├── stress_test # 压力测试
        ├── test_admin.py # 管理员接口测试
        ├── test_auth.py # 用户认证测试
        ├── test_backup_data.py # 备份数据测试
        ├── test_command_executor.py # 测试命令执行
        ├── test_engine.py # 测试引擎接口
        ├── test_learnware_client.py # 测试学件客户端
        ├── test_monitor_learnware_verify.py # 测试学件检查脚本
        ├── test_user.py # 测试用户相关接口
        └── test_verify_learnware.py # 测试单个学件检查

系统部署项目结构 ​

shell
├── deploy # 系统部署项目
    ├── docker-compose # docker部署相关文件
    │   └── docker-compose.yaml
    ├── hooks # git commit检查
    │   ├── commit-msg # commit message检查
    │   └── pre-commit # 代码检查
    ├── kubernetes # kubernetes部署相关
    │   ├── admin-frontend.yaml # 管理端相关配置
    │   ├── backend.yaml # 后端部署相关配置
    │   └── frontend.yaml # 前端部署相关配置
    └── static # 静态文件
        └── learnware-template # 学件模版
├── deploy # 系统部署项目
    ├── docker-compose # docker部署相关文件
    │   └── docker-compose.yaml
    ├── hooks # git commit检查
    │   ├── commit-msg # commit message检查
    │   └── pre-commit # 代码检查
    ├── kubernetes # kubernetes部署相关
    │   ├── admin-frontend.yaml # 管理端相关配置
    │   ├── backend.yaml # 后端部署相关配置
    │   └── frontend.yaml # 前端部署相关配置
    └── static # 静态文件
        └── learnware-template # 学件模版

系统文档项目结构 ​

shell
├── docs # 系统文档项目
    ├── README.md # 文档服务说明
    ├── content 
    │   ├── public # 图片
    │   ├── en # 英文文档
    │   ├── zh-CN # 中文文档
    │   └── tsconfig.json # 项目配置
├── docs # 系统文档项目
    ├── README.md # 文档服务说明
    ├── content 
    │   ├── public # 图片
    │   ├── en # 英文文档
    │   ├── zh-CN # 中文文档
    │   └── tsconfig.json # 项目配置

Beimingwu 开发规范 ​

由于我们采用了 Monorepo 的代码管理方式,因此规范 commit 格式与项目开发规范非常重要。下文将主要介绍 hooks 配置、代码提交规范以及前后端开发规范。

hooks 配置 ​

项目配置了 hooks, 具体如下:

  • commit-msg: 限制 commit 格式;
  • pre-commit: 在 commit 前自动进行代码格式化。

为使 hooks 生效, 需在项目根目录执行下述命令:

shell
git config core.hooksPath deploy/hooks
git config core.hooksPath deploy/hooks

若为 Linux 系统, 则需要额外赋予相关权限:

shell
chmod +x deploy/hooks/*
chmod +x deploy/hooks/*

代码提交规范 ​

北冥坞项目的 commit 格式为: <type>(<scope>): <subject>

  • <type> 必须为下述选项之一:
    • feat: 新增 feature
    • fix: 修复 bug
    • docs: 修改了文档,比如README、CHANGELOG等
    • style: 修改了格式,包括注释、代码格式、逗号等,不影响代码运行
    • refactor: 代码重构,没有加新功能或修复 bug
    • perf: 优化相关,比如提升性能、体验
    • test: 测试用例,包括单元测试、集成测试等
    • chore: 改变构建流程、或者增加依赖库、工具等
    • revert: 回滚到上一个版本
  • <scope> 有以下几个选项: frontend, backend, docs, deploy
    • 如果涉及多个范围, 则使用逗号连接, 或者直接填写 *
  • <subject> 必须填, 均为英文小写字母

举例, 以下都合法:

shell
feat(backend): add the modify learnware api
fix(frontend,backend): fix email verification
docs(*): update README
feat(backend): add the modify learnware api
fix(frontend,backend): fix email verification
docs(*): update README

后端开发规范 ​

开发后端子项目时,需要遵循一定的规范,主要涉及 web 接口、数据库、异常处理以及测试。

web 接口规范 ​

web 接口统一采用 flask-restx 框架进行开发,每个接口需定义 parser,这样可以自动生成 swagger 说明。

url 接口统一放在文件末尾使用 add_resource 进行添加。

接口默认返回 json 字符串。返回的 http code 为 200,json 字符串须包含 code 与 msg 关键字。code 为业务代码,一般 0 代表成功,msg 为消息。如果还有额外信息可以放入 data 字段。

数据库规范 ​

数据库采用 SQLAlchemy 库进行开发。数据库表定义采用 sqlalchemy.ext.declarative 进行定义。存取数据采用 raw sql 进行处理。sql 语句必须同时符合 sqlite 和 postgres 标准。

异常处理规范 ​

后端捕捉的异常需用 logger.exception 方法进行输出。

对于业务异常,需要进行捕捉,并在返回的 json 中设置对应的 code 与 msg。对于系统异常,统一返回 http code 500。

测试规范 ​

对于每一个 web 接口需要有对应的单元测试用例。在测试用例中启动模拟后端进行模拟调用然后检查返回值。

通用的测试逻辑(比如清空数据库,注册一个用户等)放在 common_test_operations.py 里面。