知乎问答系统的需求分析和概念原型

一、需求分析

本项目来自工程实践企业选题《设计一个类似知乎的问答系统》,项目基本要求是:支持问题、回答的发布和修改;问题拉链,支持按热度和时间序排序;回答点赞等。本组提出的具体需求如下:

  • 注册
    • 用户可通过"邮箱"注册账号,要求邮箱唯一
    • 密码加密,要求邮箱验证
  • 登录
    • 用户可输入邮箱和密码进行登录
  • 发布问题
    • 输入标题,正文,选择合适的"问题标签",或自定义标签,即可发布问题
  • 查看问题
    • 可以选择排序方式筛选问题,如按"问题热度"排序,按"时间"排序。
    • 可以按"标签筛选"问题
  • 查看回答
    • 问题详情页面可以展示该问题所有回答
  • 重新编辑问题
    • 用户可点击"修改问题",弹出模态框修改问题标题和正文
  • 关注问题
    • 用户可点击"关注问题",并在"我的"中"关注的问题"一栏查看
  • 发布问题
    • 发布的问题可以在主页"我的"中的"我的提问"一栏中查看
  • 写回答
    • 用户可以在问题界面中的"写回答"回答该问题
    • 回答可支持各种格式(加粗,下划线等)
    • 回答发布后,用户可在主页"我的"中"我的回答"一栏查看
  • 重新编辑回答
    • 用户可点击回答中的"修改回答"对自己的回答进行修改
  • 回答点赞/踩
    • 一个用户只能对一个回答贡献一个"点赞"或"踩"
  • 查看评论
    • 点击问题下方的"评论"按钮可以查看所有的评论
  • 发布评论
    • 用户可以对回答发布评论

二、用例分析

首先分析参与者,这里用户是唯一的参与者。

然后寻找用例,可以找到以下用例:

  1. 用户相关:包括登录、注册、修改个人信息

  2. 问题相关,包括查看问题列表(热度、时间排序)、查看问题详情、关注问题、查找问题、发布问题

  3. 回答相关,包括添加、修改回答、查看问题对应的回答列表、点赞、评论

这里以登录为例说明一下寻找用例的过程:

  1. 从需求中寻找业务领域相关的动名词和动名词短语,比如这里的登录、注册、查看问题等等

  2. 验证是否是用例。以登录为例,首先它是一个业务过程,其次它是由用户开始的。然后登录结果返回给用户结束,也就是说它终止与用户。最后,登录对用户是有用的:用户验证了身份,得到了更多权限(如创建问题、修改个人信息)。

用例图如下:

三、业务领域建模

头脑风暴

  1. 用户进行注册,然后登录自己的账号

  2. 用户进入首页,获取问题列表,并按热度排序

  3. 用户点击某个问题,进入详细页面,展示问题的回答

  4. 用户点击回答,对回答点赞

  5. 用户查看回答的评论,并添加了一条评论

  6. 用户发布了一个新的问题,并添加了新标签

  7. 用户回答了问题

这里的类主要有用户、问题、回答和评论,而问题的回答、回答的评论则是一对多关联关系,最后问题、回答、评论都要关联到用户,可得到类图如下:

四、数据模型

根据以上分析,可以设计出用户、问题、回答和评论四个数据实体及其包含数据,得出数据模型如下:

1. users 用户表

名称 类型 注释
id int 用户ID
email 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、创建时间也将一并保存。

六、总结

通过需求分析和概念原型设计,可以更加规范化、流程化地实现产品基本功能设计流程,对于软件产品的设计构建有很大帮助,是后期实际编码过程的纲领。

posted @ 2020-12-06 22:18  Clesora  阅读(391)  评论(0)    收藏  举报