知乎问答系统的需求分析和概念原型
一、需求分析
本项目来自工程实践企业选题《设计一个类似知乎的问答系统》,项目基本要求是:支持问题、回答的发布和修改;问题拉链,支持按热度和时间序排序;回答点赞等。本组提出的具体需求如下:
- 注册
- 用户可通过"邮箱"注册账号,要求邮箱唯一
- 密码加密,要求邮箱验证
- 登录
- 用户可输入邮箱和密码进行登录
- 发布问题
- 输入标题,正文,选择合适的"问题标签",或自定义标签,即可发布问题
- 查看问题
- 可以选择排序方式筛选问题,如按"问题热度"排序,按"时间"排序。
- 可以按"标签筛选"问题
- 查看回答
- 问题详情页面可以展示该问题所有回答
- 重新编辑问题
- 用户可点击"修改问题",弹出模态框修改问题标题和正文
- 关注问题
- 用户可点击"关注问题",并在"我的"中"关注的问题"一栏查看
- 发布问题
- 发布的问题可以在主页"我的"中的"我的提问"一栏中查看
- 写回答
- 用户可以在问题界面中的"写回答"回答该问题
- 回答可支持各种格式(加粗,下划线等)
- 回答发布后,用户可在主页"我的"中"我的回答"一栏查看
- 重新编辑回答
- 用户可点击回答中的"修改回答"对自己的回答进行修改
- 回答点赞/踩
- 一个用户只能对一个回答贡献一个"点赞"或"踩"
- 查看评论
- 点击问题下方的"评论"按钮可以查看所有的评论
- 发布评论
- 用户可以对回答发布评论
二、用例分析
首先分析参与者,这里用户是唯一的参与者。
然后寻找用例,可以找到以下用例:
-
用户相关:包括登录、注册、修改个人信息
-
问题相关,包括查看问题列表(热度、时间排序)、查看问题详情、关注问题、查找问题、发布问题
-
回答相关,包括添加、修改回答、查看问题对应的回答列表、点赞、评论
这里以登录为例说明一下寻找用例的过程:
-
从需求中寻找业务领域相关的动名词和动名词短语,比如这里的登录、注册、查看问题等等
-
验证是否是用例。以登录为例,首先它是一个业务过程,其次它是由用户开始的。然后登录结果返回给用户结束,也就是说它终止与用户。最后,登录对用户是有用的:用户验证了身份,得到了更多权限(如创建问题、修改个人信息)。
用例图如下:

三、业务领域建模
头脑风暴
-
用户进行注册,然后登录自己的账号
-
用户进入首页,获取问题列表,并按热度排序
-
用户点击某个问题,进入详细页面,展示问题的回答
-
用户点击回答,对回答点赞
-
用户查看回答的评论,并添加了一条评论
-
用户发布了一个新的问题,并添加了新标签
-
用户回答了问题
这里的类主要有用户、问题、回答和评论,而问题的回答、回答的评论则是一对多关联关系,最后问题、回答、评论都要关联到用户,可得到类图如下:
四、数据模型
根据以上分析,可以设计出用户、问题、回答和评论四个数据实体及其包含数据,得出数据模型如下:
1. users 用户表
| 名称 | 类型 | 注释 |
|---|---|---|
| id | int | 用户ID |
| varchar(30) | 邮箱 | |
| password | varchar(100) | 密码 |
| name | varchar(30) | 名字 |
| description | varchar(256) | 简介 |
| avatar_url | varchar(100) | 头像 |
| create_at | bigint | 创建时间 |
| update_at | bigint | 更新时间 |
2. questions 问题表
| 名称 | 类型 | 注释 |
|---|---|---|
| id | int | 问题ID |
| title | varchar(50) | 标题 |
| content | text | 内容 |
| creator_id | int | 创建问题用户的ID |
| tag | varchar(256) | 标签 |
| answer_count | int | 回答个数 |
| create_at | bigint | 创建时间 |
| update_at | bigint | 更新时间 |
3. answers 回答表
| 名称 | 类型 | 注释 |
|---|---|---|
| id | int | 问题ID |
| content | text | 内容 |
| creator_id | int | 创建回答用户的ID |
| question_id | int | 对应问题的ID |
| upvote_count | int | 点赞个数 |
| comment_count | int | 评论个数 |
| create_at | bigint | 创建时间 |
| update_at | bigint | 更新时间 |
4. comments 评论表
| 名称 | 类型 | 注释 |
|---|---|---|
| id | int | 评论ID |
| content | text | 内容 |
| creator_id | int | 创建评论用户的ID |
| question_id | int | 对应回答的ID |
| create_at | bigint | 创建时间 |
| update_at | bigint | 更新时间 |
五、概念原型
以上的用例和数据模型组成了概念原型,其工作过程举例如下:
以发布问题为例,首先验证用户登录状态,若未登录则要求登录。验证成功后渲染页面,用户填写问题标题、内容、标签,用户可以选择已有标签,也可以选择新建标签。填写完毕后用户点击发布,后台将内容存至数据库,包括用户的ID、创建时间也将一并保存。
六、总结
通过需求分析和概念原型设计,可以更加规范化、流程化地实现产品基本功能设计流程,对于软件产品的设计构建有很大帮助,是后期实际编码过程的纲领。

浙公网安备 33010602011771号