类知乎问答系统的设计方案
一.项目介绍
本次工程实践项目意在实现一个类知乎问答系统,用户登录后可以在该平台提问回答和评论,并且可以收藏问题和回答等。
二.软件设计方案
1.架构风格
本项目采用B/S架构风格,用户通过web端请求访问服务器的数据,服务器端根据请求的内容更改数据和视图,并反映到网页上。
B/S模式的架构风格具有典型的模块化特征,降低了系统中客户和服务构件之间耦合度,提高了服务构件的可重用性。
2.设计模式
设计模式的本质是面向对象设计原则的实际运用总结出的经验模型。
本项目使用MVC框架。
MVC中M、V和C所代表的含义如下:
Model(模型)代表一个存取数据的对象及其数据模型。
View(视图)代表模型包含的数据的表达方式,一般表达为可视化的界面接口。
Controller(控制器)作用于模型和视图上,控制数据流向模型对象,并在数据变化时更新视图。控制器可以使视图与模型分离开解耦合。
结合本项目分析,模型就是问题,回答等对象,视图是对用户可视的并与之交互的界面,视图决定如何向用户展示对象的数据,控制器捕捉鼠标移动、鼠标点击和键盘输入等事件,将其转化成服务请求,然后再传给模型或者视图。用户通过控制器来与系统交互,通过控制器来操纵模型,从而向模型传递数据,改变模型的状态,并最后导致视图的更新。
三.软件概念原型
软件架构模型是通过一组关键视图来描述的,同一个软件架构,由于选取的视角和抽象层次不同可以得到不同的视图,这样一组关键视图搭配起来可以完整地描述一个逻辑自洽的软件架构模型。常用的几种视图有分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图和工作任务分配视图。
1.分解视图
分解视图用软件模块勾划出系统结构,通过不同抽象层级的软件模块形成层次化的结构,呈现为较为明晰的分解结构。

2.依赖视图
依赖视图展现了软件模块之间的依赖关系,

数据模型封装数据和功能,web界面显示信息,获得来自模型的数据,决定模型展示给用户的方式,依赖于数据模型。控制器作用于视图和模型上,空子数据流向模型对象,并在数据变化时更新视图,依赖于视图和模型。
3.执行视图
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件,都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。
执行实体可以最终分解到软件的基本元素和软件的基本结构,因而与软件代码具有比较直接的映射关系。在设计与实现过程中,我们一般将执行视图转换为伪代码之后,再进一步转换为实现代码。

4.实现视图
实现视图是描述软件架构与源文件之间的映射关系。通过目录和源文件的命名来对应软件架构中的包、类等静态结构单元,这样实现视图就可以由软件项目的源文件目录树来呈现。
|-- controller
|-- UserController //用户管理
|-- QuestionController //问题管理
|-- AnswerController //回答管理
|-- CommentController //评论管理
|-- CollectionController //收藏夹管理
|-- model
|-- User //用户模型
|-- Question //问题模型
|-- Answer //回答模型
|-- Comment //评论模型
|-- Collection //收藏夹模型
|-- service
|-- UserService
|-- QuestionService
|-- AnswerService
|-- CommentService
|-- CollectionService
|-- util
5.工作分配视图
工作分配视图将系统分解成可独立完成的工作任务,以便分配给各项目团队和成员。工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在个项目团队和成员之间合理地分配和调整项目资源。

四.数据库设计
User表
| 字段 | 类型 | 注释 |
|---|---|---|
| User_ID | int | 用户ID |
| User_Name | varchar | 用户名 |
| Password | varchar | 用户登录密码 |
| Creat_Time | bigint | 用户创建时间 |
Question表
| 字段 | 类型 | 注释 |
|---|---|---|
| Question_ID | int | 问题ID |
| Question_Content | varchar | 问题内容 |
| User_ID | int | 提问者ID |
| Creat_Time | bigint | 问题创建时间 |
Answer表
| 字段 | 类型 | 注释 |
|---|---|---|
| Answer_ID | int | 回答ID |
| Answer_Content | varchar | 回答内容 |
| Question_ID | int | 问题ID |
| User_ID | int | 回答者ID |
| Creat_Time | bigint | 回答创建时间 |
Comment表
| 字段 | 类型 | 注释 |
|---|---|---|
| Comment_ID | int | 评论ID |
| Comment_content | varchar | 评论内容 |
| Answer_ID | int | 回答ID |
| Creat_Time | bigint | 评论创建时间 |
五.技术选型
开发工具:IntelliJ IDEA
框架:Spring,Mybatis
数据库:MySQL
容器:Docker
六.系统概念原型的核心工作机制
- 概念是人对能代表某种事物或发展过程的特点及意义所形成的思维结论。
- 概念原型是一种虚拟的、理想化的软件产品形式。
- 概念原型 = 用例 + 数据模型
结合本项目,概念原型的工作机制:用户通过邮箱注册或登录系统,登陆后可以浏览已有的问题和回答及评论,也可以提出问题或对问题发表回答,也可以对回答发出评论,对感兴趣的问题和评论可以加入收藏夹,对感兴趣的用户可以加入关注。
七.总结
在本次博客的写作中,我对软件架构及多种视图展示有了更多的理解。
本文主要参考软件科学基础概论一文。

浙公网安备 33010602011771号