基于微服务的教学资源共享平台-需求分析及设计分析

瑞脑销金兽 2021-12-26 22:14:10

项目概述

很多高校提供一个教学资源共享平台,用来实现学习资源的建设和共享,同时也将课程资源平台可以作为教师日常教学辅助和学生学习及增强校企合作培训人才的一个工具。国内外已经有了一些成熟的视频流媒体共享网站,例如国内的慕课平台,国外最著名的是Coursera,为学生提供了海量的学习资源。

但是不管MOOC和还是Coursera都只主要提供了学习相关的视频教学。对于一个校园共享平台,还应该具有其他更完善的功能。比如在线考试,完成作业并提交,运行代码等功能。

本项目计划使用微服务架构,因为传统单体应用架构,将所有应用服务封装在一个应用中,不同部分的功能耦合性强,不易于拓展,可靠性弱。而微服务架构中每个服务足够内聚,足够小,服务之间是松耦合的,易于拓展。每个功能模块都是可以独立运行的,通过模块之间的相互调用实现最终的功能。

本项目基将对去年项目进行整合以及增加更丰富的功能,预期增加在线运行代码,用户认证鉴权功能,改进流媒体播放等功能,最终搭建一个集视频学习,作业提交,课程考试,文件下载,在线运行代码等功能于一体的网络共享平台。

需求分析

功能性需求

  • 登陆、退出功能。
  • 学生在线考试,系统自动计算分数并保存。
  • 学生进行选课和查看课程视频,上传下载作业。
  • 学生可以在线运行代码。
  • 教师创建课程设置课程大纲,上传下载视频和作业。
  • 教师统计学生考试和作业情况。
  • 教师创建考试,录入试题和预览试卷。
  • 管理员进行人员信息管理和上传下载文件与视频。

非功能性需求

  • 系统具有良好的可拓展性和可维护性
  • 系统具有较高的性能,并发数满足一定条件。

用例图

教师端:

 学生端:

管理员:

 ER图

软件架构

1.微服务介绍

微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。

服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API ) 。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。

另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务。可以使用不同的语言来编写服务,也可以使用不同的数据存储。

微服务架构具有以下优点:

  • 每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务功能或业务需求。
  • 开发简单、开发效率提高,一个服务可能就是专一的只干一件事。
  • 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
  • 微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。微服务允许你利用融合最新技术。
  • 每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一数据库。

2.系统服务模块划分和设计

根据需求分析确认的系统功能,将系统服务模块划分如下:

       登录模块,文件上传下载模块,视频播放模块,在线答题模块,运行代码模块,统计模块。

为了实现单点登录和统一的认证鉴权管理,在微服务模块之前搭建网关gateway,使用JWT认证,拦截器进行鉴权,微服务模块之间统一通过网关交互。

系统架构图如下:

软件设计模式

项目中使用了springboot以及springmvc中的拦截器,其中涉及很多涉及模式,概况如下:

  • 简单工厂模式

       Spring中的BeanFactory就是简单工厂模式的体现,根据传入beanName来获得Bean对象,先从缓存中取,缓存中没有再创建。

  • 单例模式

       Spring中依赖注入的Bean实例默认是单例的。

      Spring的依赖注入(包括lazy-init方式)都是发生在AbstractBeanFactory的getBean里。getBean的doGetBean方法调用getSingleton进行bean的创建。

  • 代理模式

       spring AOP就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用JDK Proxy去进行代理了,这时候Spring AOP会使用Cglib,这时候Spring AOP会使用Cglib生成一个被代理对象的子类来作为代理。

  • 观察者模式

       Spring事件驱动模型就是观察者模式很经典的应用。

      事件角色:ApplicationEvent(org.springframework.context包下)充当事件的角色,这是一个抽象类。

     事件监听者角色:ApplicationListener充当了事件监听者的角色,它是一个接口,里面只定义了一个onApplicationEvent()方法来处理ApplicationEvent。

     事件发布者角色:ApplicationEventPublisher充当了事件的发布者,它也是个接口。

  • 过滤器模式

      Springmvc中的过滤器和拦截器使用的就是过滤器模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。来自按前端的请求被拦截通过验证之后放行,这样一层层下来最后抵达控制器。

学号:361 

...全文
274 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

571

社区成员

发帖
与我相关
我的任务
社区描述
软件工程教学新范式,强化专项技能训练+基于项目的学习PBL。Git仓库:https://gitee.com/mengning997/se
软件工程 高校
社区管理员
  • 码农孟宁
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧