本文主要内容:
- 1. 需求分析
- 1.1 用例图
- 1.2 开发技术与运行环境
- 2. 数据库设计
- 2.1 E-R图
- 2.2 数据库实现
- 3. 系统设计与实现
- 3.1 系统架构设计
- 3.2 系统界面设计
- 4. 开发与部署
下文摘录自课程报告和汇报PPT。
1. 需求分析
1.1 用例图
本系统的使用者,主要是平台用户和管理员用户。
用户功能用例图:
用户用例图:
模块划分:
1.2 开发技术与运行环境
技术与环境 | 说明与描述 |
开发工具: | |
Intellij IDEA | 后端开发工具,Java集成开发环境 |
PHPstorm | 前端开发工具 |
MySQL | 关系型数据库 |
Navicat for MySQL | 数据库辅助工具 |
Maven | 项目管理和综合工具 |
Postman | API接口测试工具 |
Nginx | 前端运行环境 |
Gitlab | 团队协作工具 |
Gitlab-Runner | 后端代码持续集成与持续部署工具 |
Docker | 后端代码部署工具 |
Windows 10 Pro | 团队协作开发的统一系统 |
Ubuntu 18.04 | 项目部署环境 |
后端技术: | |
Spring Boot | 新一代 JavaEE 开发标准 |
Tk.MyBatis | 基于 MyBatis 二次开发的轻量级框架,用于简化 MyBatis 操作 |
MyBatisGenerator | Maven 插件,用于 MyBatis 相关代码生成 |
PageHelper | MyBatis 分页插件 |
前端技术: | |
HTML+CSS+JS | 前端基本技术 |
JQuery | 快速、简洁的JavaScript框架 |
Bootstrap | CSS/HTML框架,前端开发的开源工具包 |
其中本项目是团队协作开发,故采用Gitlab私服来管理团队协作的代码,使用Gitlab-Runner将团队成员的代码进行持续集成和持续交付,并结合Docker等技术,进行项目的持续部署,极大提高了团队协作开发的效率。
2. 数据库设计
2.1 E-R图
本爱问社区平台采用MySQL数据库来进行后台数据的存储。在需求分析的基础上,可以得出系统中的实体主要有:用户、用户数据、问题、回答、文章、评论、分类、收藏。系统实体之间的E-R图如图所示。
2.2 数据库实现
最终本项目共有20个表:
除去一些收藏、点赞、举报、日志、操作记录等表外,读写最高的6个表,以及这6个表之间的关系如下所示:
3. 系统设计与实现
3.1 系统架构设计
首先是前端的设计。前端即客户端,是用户直接进行操作、沟通的页面。良好的前端设计能够降低用户使用的难度,提高用户体验。前端代码框架设计如图:
然后是服务端的设计。服务端设计的优良直接影响整个系统的开发效率、维护难易程度和运营的稳定性。首先根据业务逻辑,将后台划分为控制层、业务逻辑层等共7个模块,同时还有一个数据库访问的公共模块,如图:
明确了后台的基本框架后,使用Spring Boot的开发技术,完成了后台的搭建,最终的完整后台逻辑框架,以及各个模块之间的依赖、继承关系,如图:
- 通用的响应结果,是控制层的所有方法的返回结果的具体实现,之所以创建该类,是保证所有数据返回的结构是一致的,从而提高前后端分离开发的规范性和效率。
- 通用的控制器,是用来关联通用的响应结果,保证返回结果一致。
- 通用的领域模型,为通用的响应结果返回数据,提供实体规范。
- 接下来是实际的的数据访问流程。Dao层是后台和数据库直接交互的数据库访问层,Service业务逻辑层需要通过Dao层,才能将控制层的数据,保存到数据库,或者从数据库读取数据交给业务逻辑层,进而交给控制层处理。
- 业务逻辑层,有一个通用的CRUD业务接口,该接口主要实现的是通用的增删改查服务。如根据某个键,从某个表中读取一条数据,或者根据某个、某几个条件,进行查询、修改,在各个业务逻辑层接口中均需要用到。故将其提取出来,采用泛型的形式,进行实现,极大提高了代码的利用率。
- Domain领域模块层,或称为实体层,其主要实现实体的定义,即定义和数据库表一一对应的实体,其他的各个层,可以直接调用该实体,进行数据的各种处理。
- 基本工具箱和基本配置文件,主要是各种通用的小工具的实现,以及跨域等系统配置问题的解决。
3.2 系统界面设计
主页:
问题列表页:
问题详情页:
文章列表页:
个人主页:
举报处理页面:
注册页面:
登录页面:
问题发布页面:
含有违规内容提示:
文章发布页面:
前端页面UI参考自:tipask。
4. 开发与部署
项目开发过程中的代码托管平台采用私服搭建的GitLab平台托管,进行协作开发。项目托管平台的页面如图:
团队成员通过Git拉取代码到本机后,实现相应具体的每个人的某个功能后,即可进行提交。
团队成功将代码提交到GitLab服务器,GitLab服务器即可实现代码的持续集成与持续交付,即自动对代码进行编译,如果编辑成功,则显示“已通过”的提示,如图:
然后GitLab-Runner自动将编译完成的jar包部署到Docker容器中。如果成功,最终提示绿色字体的“Job succeeded”。前端开发成员可以直接使用已经开发好的功能,无需再将代码拉取到前端开发成员的环境中编译运行,极大提高了开发效率。如图:
以上。