技术规格说明

技术规格说明

1.概述&技术栈

1.1产品概述

本产品是一个基于Web的编程学习工具,旨在提供一个方便、高效的编程实验环境。

1.2技术

A.前端框架

前端采用的主要语言有Htm+css+JavaScript。

前端采用Vue.js框架,Nginx反向代理,Docker部署。

其他前端开发所需的依赖包括但不限于:vite、quasar、axios、echarts、mavon-editor、pinia、vue-router、eslint、prettier等。

B.后端框架

后端框架采用的是gin框架,openresty代理请求和redis缓存数据库

Gin框架高性能的Go语言Web框架

OpenResty是一个基于Nginx的Web应用服务器,它可以通过Lua脚本扩展Nginx的功能

Redis是一个开源的内存缓存数据库,支持多种数据结构

C.数据库

数据库使用PostgreSQL,它是一款功能强大、可靠稳定的关系型数据库,被广泛用于大型企业级应用。

D.测评机

测评机采用docker+go语言的测评方法,旨在为测评机提供一个隔离的执行环境

E.服务器

本产品使用的是学校编译平台服务器

2.产品设计

2.1产品基础功能设计

图x为本编译平台的产品功能设计图,其中,虚线框中部分仅助教用户/教师用户可见

2.2项目架构

图x-产品基础功能流程图

2.3接口规格

本部分仅展示了课程管理的API规格,其他规格说明过多不予展示。

       

3.分析

运行环境

本系统的部署、运行均在linux服务器上,学生可以通过浏览器访问本网站

系统设计

抽象

  • 数据模型抽象
    • 将用户抽象为普通用户和管理员用户两类,分别对应普通学生和助教/老师
    • 将不同届开设的课程抽象为“课程”,提供重修生、编译大赛参赛生等单一用户对应多个课程实体等需求的支持
    • 将作业与考试统一抽象为“任务”,减少重复的接口设计
  • 底层数据抽象化
    • 将数据库底层的数据访问方式进行封装,使其以面向对象的形式进行访问,避免了直接使用 SQL 语句对数据库进行操作的复杂性。
    • 将数据库结构的变动维护成数据库迁移(migration),使用数据库迁移工具来维护数据库结构的变化。数据库迁移工具可以记录数据库结构的变更,包括添加表、删除表、添加字段、删除字段等操作,使得数据库的升级和维护更加方便和可控。

内聚/耦合/模块化

整体上使用了前后端分离的方式降低功能的耦合度。通过设定统一的数据接口,前后端可以并行开发,共同维护统一的API。同时通过定义明确的API接口,前后端之间的依赖关系也变得更加清晰。这样可以使得整个系统的架构更加灵活和可扩展。

前后端分离还可以促进系统的内聚性。由于前后端各自负责不同的功能模块,因此可以更加专注于每个模块的设计和实现,从而实现系统的高内聚性,使得系统更加易于维护和升级。

信息隐藏和封装

后端只提供一组API给前端而不提供具体的sql操作,将数据模型、具体数据进行隐藏。

界面和实现的分离

界面指前端调用相应接口实现前端效果,实现指后端提供API的sql操作,则界面和实现的分离即为前后端分离。后端给前端提供一套完整的API服务时,不需关心前端如何布局UI;前端可以进行更换UI设计,无需关注后端如何提供API实现的具体实现。

系统错误记录机制

  1. 错误日志记录:系统在发生错误或异常时,将错误信息记录到日志文件中,包括错误类型、错误代码、错误时间等。
  2. 异常处理机制:对于系统中发生的异常情况,会进行捕获、处理、返回错误信息或执行相应的操作。

应对需求变化的灵活性

在设计数据模型时我们考虑到了如下的可扩展性:

  • 课程名不总是统一格式,如“20xx级编译课程”,提供了为编译大赛学生单独设置辅导课程的扩展性。
  • 用户type除了user、teaching_assistant、teacher还可新增超级用户等类型,同理还有notice的type、post
  • 设置user_course表,应对单个用户对应多个课程的场景,如重修生、编译大赛学生等(没有设置相应的权限,只维护相应课程的内容可见性,是否可提交评测由其评测时间是否逾期决定)
  • 维护assignment_attribute表,使任务对应的属性可以定制,如:有的作业可以不设置quiz、有的作业可以没有guidebook(如考试)
  • 维护student_assignment_extended_time,实现考试/作业全体学生延时、单个学生因特殊原因延时、助教无限期提交评测(设置延时为负数表示正无穷)等特殊场景
  • 将讨论帖设置回复对象,支持多级回复制度
  • 设置post_tag,一个讨论帖可以对应多个tag,增加tag只需要在该表中进行维护
  • 设置user_liked_post维护用户like的post,保证用户对帖子最多只点一个赞
  • 提供了resource抽象,resource设置了所属课程id字段,实现不同课程可以开放不同课程资料

系统性能

对大量数据/高并发场景的处理能力

  • go语言对并发的支持,以及gin后端框架的性能可以支持考试、作业ddl等场景下的需求
  • 用Docker实现分布式可扩容评测
  • 优化sql语句提高查询数据库的效率

业务流程

输入规约

对于用户的输入不应有前提假设,对于前端传递给后端的数据则可以进行一定的规约,这一规约围绕API展开,是对用户透明的

异常处理

对于系统中发生的异常情况,会进行捕获、处理、返回错误信息或执行相应的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值