本文基于我们的工程实践项目--设计一个类似知乎问答系统。该问答系统支持提问、回答等基本操作;发布后能够修改和删除回答;回答支持按热度和时间线排序;能够对回答点赞和反对;能够对问答发表评论;展现当前热门问题列表等功能。
二、项目架构
本项目采用B/S模式架构风格,B/S模式的架构风格是指游览器通过请求和应答的方式访问或者调用服务代码。这里的请求和应答可以是函数调用和返回值,也可以是TCP Socket中的send和recv,还可以是HTTP协议中的GET请求和响应。
分层设计是一种最为常见的架构设计方案,能有效地使系统结构清晰、设计简化。MVC模式是当今最为流行的多层设计模式。该模式把一个应用的输入、处理、输出流程进行分离并抽象为控制器(Controller)、模型(Model)、视图(View)三个模块,实现了业务逻辑层、数据库访问层和用户界面层之间在彼此分离的同时仍保持松散的耦合关系,增加了灵活性和可扩展性。
MVC中M、V和C所代表的含义如下:
-
Model(模型)代表一个存取数据的对象及其数据模型。
-
View(视图)代表模型包含的数据的表达方式,一般表达为可视化的界面接口。
-
Controller(控制器)作用于模型和视图上,控制数据流向模型对象,并在数据变化时更新视图。控制器可以使视图与模型分离开解耦合。
基于MVC模式的特点,本项目采用MVC架构进行软件开发,采用MVC架构可以使得项目前后端分离,前端只需要进行数据展示,而业务逻辑处理则由后端负责,这样减少了项目实现的复杂度。
三、接口API
API是指应用程序编程接口,我们通过API接口可以实现特定的功能,而不需要了解其内部实现细节。可以把API接口理解为是特定服务的一种封装,将服务封装起来提供给他人调用,这样一来很多功能不需要从新开发。
接口名称 | 接口地址 | 请求方式 | 请求参数 | 响应信息 |
---|---|---|---|---|
注册 | /register | POST | 用户名、邮箱、密码 | 注册成功/失败的信息 |
登录 | /login | POST | 邮箱、密码 | 登陆成功/失败的信息 |
个人信息 | /profile/{userId} | GET | 用户ID | 用户信息 |
提问 | /ask | POST | 问题 | 问题ID |
查看问题 | /question/{questionId} | GET | 问题ID | 问题相关信息 |
回答 | /answer | POST | 回答 | 回答ID |
回答获赞数 | /likeAnswer | GET | 回答ID | 回答获赞数 |
添加至收藏夹 | /addCollection | POST | 收藏夹 | 添加成功/添加失败 |
收藏夹内容 | /collection/{collectionId} | GET | 收藏夹ID | 收藏夹内容 |
四、软件系统概念原型视图
4.1 分解视图
分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。
4.2 依赖视图
依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。
4.3 泛化视图
泛化视图展现了软件模块之间的一般化或具体化的关系,典型的例子就是面向对象分析和设计方法中类之间的继承关系。泛化视图有助于描述软件的抽象层次,从而便于软件的扩展和维护。比如通过对象组合或继承很容易形成新的软件模块与原有的软件架构兼容。
4.4 执行视图
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。
4.5 部署视图
部署视图是将执行实体和计算机资源建立映射关系。这里的执行实体的粒度要与所部署的计算机资源相匹配,比如以进程作为执行实体那么对应的计算机资源就是主机,这时应该描述进程对应主机所组成的网络拓扑结构,这样可以清晰地呈现进程间的网络通信和部署环境的网络结构特点。
五、数据库设计
用户表
字段 | 类型 | 说明 |
---|---|---|
user_id | int(11) | 用户id |
varchar(50) | 邮箱 | |
password | varchar(50) | 密码 |
username | varchar(50) | 用户名 |
gender | int(11) | 性别 |
simple_desc | varchar(50) | 一句话介绍 |
position | varchar(100) | 居住地 |
industry | varchar(100) | 所在行业 |
career | varchar(100) | 职业经历 |
education | varchar(100) | 教育经历 |
问题评论表
字段 | 说明 |
---|---|
comment_id | 评论id |
commentContent | 评论内容 |
at_user_id | 回复谁 |
liked_count | 被点赞次数 |
create_time | 评论时间 |
answer_id | 评论在哪个问题下 |
user_id | 评论用户 |
回答表
字段 | 说明 |
---|---|
answer_id | 评论id |
content | 回答内容 |
liked_count | 点赞数 |
create_time | 回答时间 |
question_id | 回答的问题id |
user_id | 回答用户id |
收藏夹表
字段 | 说明 |
---|---|
collection_id | 收藏夹id |
collection_name | 收藏夹名称 |
create_time | 创建时间 |
update_time | 更新时间 |
user_id | 收藏夹用户id |
六、软件系统运行环境和技术选型
开发语言:JAVA
Web框架:SpringBoot
缓存:Redis
数据库:MySQL
七、系统概念原型的核心工作机制
-
概念是人对能代表某种事物或发展过程的特点及意义所形成的思维结论。
-
概念原型是一种虚拟的、理想化的软件产品形式。
-
概念原型 = 用例 + 数据模型
概念原型的工作流程:
用户在登陆页面登录系统后,可以进行提问,也可以对问题进行评论和回答。
回答页面可以对回答内容进行编辑,编辑完后将回答进行发表,发表后也可以删除已发表的内容。