[知识路书]技术规格说明书

这是一篇课程博客javascript

项目 内容
课程:北航-2020-春-软件工程 博客园班级博客
做业要求 技术规格说明书
咱们在这个课程的目标是 提高团队管理及合做能力,实践软件工程开发
这个做业在哪一个具体方面帮助咱们实现目标 介绍团队项目【知识路书】,定义项目技术规格和相关特性

关于本组:【敏杰开发团队介绍】html

关于选题:【知识路书项目介绍】前端

总体规划

先后端分离。vue

对先后端分离的介绍能够参考:这篇博客java

考虑到项目体量和开发难度,咱们选用的实际是上文中介绍的半分离模式node

之因此不引入nodejs中间层将控制器前移,是由于可预见地,应用的业务逻辑并不复杂,后端提供一套restful api,加上少许定制的功能接口足以知足大部分的开发需求。同时队里的同窗前端经验并不丰富,所以没有必要额外引入nodejs的学习成本。所以综合考虑,咱们做出了这个选择。python

在具体的技术方案上,前端咱们选用vue.js为基础框架搭建spa,后端选用django并基于其插件扩展快速开发api。选用vue主要看中其易上手的特色,方便咱们快速进入开发状态;选用django主要看中其大而全的设计,其自带的ORM、路由管理、用户系统等组件免去了咱们学习多种第三方库的烦恼,而且django-rest-framework、django-jwt等插件也方便咱们快速开发须要的接口。mysql

如何体现抽象

  • 论文被抽象为一个包含做者、标题、摘要、发表时间等属性的数据聚合,而不使用具体的pdf文件表示一篇论文,这样能够方便地管理论文与pdf文件间的映射关系、论文与论文间的引用关系
  • 路书被抽象为素材结点集合及其上的链接关系,这样便于序列化;不一样的素材均可以继承自素材父类(原型),不一样的链接也继承自链接父类(原型),这样便于代码复用
  • 后端的django ORM组件提供数据模型及持久化的抽象

如何体现高内聚

  • 前端请求restful接口,只给出查询必需的参数而不须要/不容许传控制参数影响后端的查询逻辑,这样后端的接口实现细节对前端隐藏

如何体现低耦合

  • 先后端分离的设计自己就是低耦合的:数据、逻辑与呈现解耦
  • “抽象”一节中提到的论文数据模型其实是将论文的元信息与具体pdf文件解耦,这样能够方便替换不一样版本的pdf文件
  • 文献管理与路书绘制组件解耦,各类文献相关的素材容许复用,提高编辑效率

如何处理错误

因为咱们使用View UI,其已经提供了一套模态框,所以咱们能够在此基础上封装错误处理,根据错误种类在模块框中显示不一样的错误信息nginx

/**
 * 让VUE组件根据异常推出错误模态框
 * @param vc vue component
 * @param err
 */
export const pushErrModal = (vc, err) => {
  const options = getErrModalOptions(err) // 根据异常种类给出错误提示信息
  const errData = err.response ? err.response.data || err : err
  if (...) { // do anything you want
    ...
  } else {
    ...
  }
  vc.$Modal.error(options) // push modal
}

使用时只须要用try-catch捕获不一样的异常并使用这个方法处理便可git

咱们考虑到不一样的可能错误制定了内部错误码。目前暂时有以下类型:

Name Code Description
Uncaught - 未能正确处理的错误
Debug 0001 调试用错误
NotImplemented 0010 未实现的方法或接口
RuntimeErr 1000 js运行时错误
Undefined 1010 访问未定义对象
NetworkErr 4000 没法分类的网络错误
NotFound 4040 访问或查询不存在的资源
Unauthorized 4010 未登录或没有访问权限

后续咱们会根据开发时遇到的需求补充

对开发环境与部署环境的假设

  • 前端开发环境统一使用yarn管理依赖包,须要预留本地3000端口用于运行测试;须要已配置好git及其余协做工具
  • 后端开发环境要求python版本为3.6或更高,须要使用venv或conda建立虚拟环境并安装requirements.txt中的依赖
  • 生产环境正确部署并配置nginx(用于静态资源分发)和uwsgi(用于代理django)。假设生产环境服务器核数、内存等配置合理

应对变化的灵活性

总体是符合开闭原则的。

  • 后端部分:对数据模型的修改直接建立并应用新的migration便可,在部署时只须要增量应用migrations便可保持向前更新;因为restful api根据模型和序列化器动态建立,所以这部分几乎不须要改动
  • 前端部分:基于vue component组织开发,面向组件的开发能够将每次修改的范围最小化
  • 先后端协调:数据请求过程是无状态的,结合前文介绍的高内聚、低耦合特色,先后端能够最大程度实现各自迭代互不干扰。对于新的接口需求,前端同窗只须要将功能告知后端同窗,后端同窗根据需求增设接口并给出调用方法,再由前端接入便可

对大量数据的处理能力

考虑到咱们预期的用户规模并不大(千级),后端逻辑简单且支持自行定制部署,所以项目的高并发需求并不强烈。对于正常的访问场景,mysql + nginx + uwsgi的部署策略对于通常的生产服务器已经够用。

假如出现更强烈的高并发需求,能够借助CDN分发静态资源(前端SPA),后端增长响应实例数量,并添加redis等中间件消峰。

相关文章
相关标签/搜索