【二食堂】技术规格说明书
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2020春季计算机学院软件工程(罗杰 任健) |
这个作业的要求在哪里 | 技术规格说明书 |
我们在这个课程的目标是 | 学习敏捷开发之道 |
这个作业在哪个具体方面帮助我们实现目标 | 项目技术规格说明 |
技术规格说明书
技术栈
我们团队的产品时在线文本标注系统,主要实现文本中专业术语的标注和生成知识图谱功能。
前端
前端暂时没有过多的需求,所以使用原生的js+css+html完成,以后根据需求的增加可能会使用其他前端框架进行开发,以增加可维护性。
为了绘制关系图,我们使用ECharts ,这是一个使用 JavaScript 实现的开源可视化库,提供了丰富的可视化类型。
后端框架
后端框架使用 Python 下的 Web 框架 Django。优点是免费开源,可以快速搭建高性能、优雅的网站,学习曲线较缓。Django在一定程度上借鉴了 mvc (Model, View, Controller) 的架构模式,可以基本满足我们前后端交互的需求。
数据库
数据库使用最常用的MySQL,优点是易于上手,用户基数大所以相关技术解答都比较成熟,而且与 Django 的连接也比较简单。
产品设计
接口规格(暂定)
# | 请求方式 | 路径 | 参数 | 描述 |
---|---|---|---|---|
1 | POST | /user/login | user_id, user_password | 用户登录 |
2 | POST | /user/register | user_id, user_name, user_password | 用户注册 |
3 | POST | /user/info_update | user_id, user_password | 用户信息更改 |
4 | GET | /user/info | 查看用户信息 | |
5 | GET | /project/info | 查看所有项目信息 | |
6 | POST | /project/new | project_name | 创建项目 |
7 | POST | /project/enter | project_id | 进入项目 |
8 | POST | /project/invite | user_id | 邀请他人进入项目 |
9 | GET | /project/file_info | 获取项目下所有文件信息 | |
10 | POST | /project/import_file | file_path | 导入文件 |
11 | GET | /project/generate | 生成知识图谱 | |
12 | POST | /project/export | file_path | 导出知识图谱 |
13 | POST | /project/add_entity | entity_name | 添加实体 |
14 | POST | /project/delete_entity | entity_name | 删除实体 |
14 | POST | /project/entity/add_relation | relation, entity_name | 添加与其他实体的关系 |
15 | POST | /project/entity/delete_relation | entity_name | 删除与某个实体的关系 |
错误处理
-
前端
前端的错误信息主要来源于用户的注册、登录信息以及用户邀请。可能的错误类型有:- 密码错误
- 用户已存在
- 用户名不合法
- 密码不合法
- 确认密码与密码不同
- 未找到该用户
- 该用户不在线/已在其他编辑任务中
这些错误都可以通过Django的ORM去查询数据库中的用户信息进行处理。
-
后端
后端的错误主要来源于:- 未找到改实体
- 实体已经存在,无法再次添加
这样的错误信息可以在预留的接口中处理。我们就错误处理的错误信息形式还没有一个完备的设计。在后续的开发工程中我们会逐步完善错误信息的处理。
设计原则
-
内聚与耦合
Django采用了MVC的框架模式,而这种框架模式的优点就在于其高内聚,低耦合。视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
-
抽象和模块化
通过Django的ORM框架,将实体封装成面向对象的形态。类名对应数据库中的表名,类属性对应数据库里的字段,类实例对应数据库表里的一行数据(实体)。Django的orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句。
-
信息隐藏和封装
我们留了若干接口来实现前后端的分离。关于实体和知识图谱的相关数据全部存储在数据库中,只能通过接口来进行增删查改。前端只负责从接口读取数据信息,进行图形化界面的渲染。界面设计见功能规格说明书。
-
应对变化的灵活性
所有使用Django开发的项目无需关心程序底层使用的是MySQL、Oracle、sqlite....,如果数据库迁移,只需要更换Django的数据库引擎即可。
-
对大量数据的处理能力
优化数据库的结构时提高大量数据的最佳途径。而在多用户的并发处理上,通过优化sql语句,事务锁等多种方式优化处理过程。