一、前言
这篇博客以本小组的工程实践项目,即设计一个类知乎问答系统为基础,结合课堂所讲授高级软件工程相关知识,进行了软件系统分析和设计,最终形成了软件系统概念原型。
同时,以此为前提,总结了项目设计方案中所蕴含的软件结构特点,如设计模式、软件架构风格与策略等等。在了解了不同视图的概念后,如分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图、工作分配视图等,也采用了其中的一些来进行项目的软件系统概念原型的描述。
最后,我采用了适当的UML图描述了软件系统概念原型的不同视图,给出了项目的核心的数据结构设计和项目的实现视图。
二、项目设计方案
1.项目概述
此项目的开发过程以知乎为参考范例,在对其进行深入了解的前提下结合自己具体的需求分析,完成了包含了基本的登录、注册、提问、搜索问题、回答、点赞、评论、关注等基本操作的设计。
用户可以通过此软件设计的登陆页面进行登录操作,进入软件后可以进行对自己感兴趣的问题进行搜索,也可以对感兴趣的问题进行回答,同时,对自己觉得有帮助的回答也可以对进行评论和点赞。
同时,针对其他用户提交的答案,也可以进行评价和点赞以及收藏操作。
在回答界面,可以对自己发布的答案进行编辑,对自己发布的答案也可以进行删除操作。
2.项目视图展示
软件架构模型是通过一组关键视图来描述的,同一个软件架构,由于选取的视角(Perspective)和抽象层次不同可以得到不同的视图,这样一组关键视图搭配起来可以完整地描述一个逻辑自洽的软件架构模型。一般来说,我们常用的几种视图有分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图和工作任务分配视图。
2.1分解视图
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdown structure)特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。
本项目涉及到的分解视图如下:
2.2依赖视图
依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。
依赖视图在项目计划中有比较典型的应用。比如它能帮助我们找到没有依赖关系的软件模块或子系统,以便独立开发和测试,同时进一步根据依赖关系确定开发和测试软件模块的先后次序。依赖视图在项目的变更和维护中也很有价值。比如它能有效帮助我们理清一个软件模块的变更对其他软件模块带来影响范围。
本项目涉及到的依赖视图如下:
2.3泛化视图
泛化视图展现了软件模块之间的一般化或具体化的关系,典型的例子就是面向对象分析和设计方法中类之间的继承关系。值得注意的是,采用对象组合替代继承关系,并不会改变类之间的泛化特征。因此泛化是指软件模块之间的一般化或具体化的关系,不能局限于继承概念的应用。
泛化视图有助于描述软件的抽象层次,从而便于软件的扩展和维护。比如通过对象组合或继承很容易形成新的软件模块与原有的软件架构兼容。
本项目涉及到的泛化视图如下:
2.4执行视图
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。
执行实体可以最终分解到软件的基本元素和软件的基本结构,因而与软件代码具有比较直接的映射关系。在设计与实现过程中,我们一般将执行视图转换为伪代码之后,再进一步转换为实现代码。
本项目涉及到的执行视图如下:
三、项目核心的数据结构设计
数据结构设计是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象的框架。
本项目涉及到的数据结构展示如下:
3.1用户表
名称 | 类型 | 注释 |
email | varchar | 邮箱 |
username | varchar | 用户名 |
password | varchar | 用户密码 |
name | varchar | 昵称 |
avatar | varchar | 简介头像 |
description | varchar | 个人简介 |
registration_time | datetime | 注册时间 |
3.2问题表
名称 | 类型 | 注释 |
title | varchar | 问题名 |
content | text | 问题描述 |
create_user | int | 提出问题的用户ID |
answer_number | int | 回答的数量 |
visit_number | int | 浏览人数 |
create_time | datetime | 创建时间 |
3.3回答表
名称 | 类型 | 注释 |
answer_id | int | 问题用户 |
content | text | 回答的内容 |
up_count | int | 点赞数 |
down_count | int | 不赞同数 |
visit_number | int | 浏览人数 |
create_time | datetime | 创建时间 |
3.4评论表
名称 | 类型 | 注释 |
comment_id | int | 评论用户 |
content | text | 内容 |
create_user | int | 提出问题的用户ID |
up_count | int | 点赞数 |
down_count | int | 不赞同数 |
visit_number | int | 浏览人数 |
create_time | datetime | 创建时间 |
四、目录文件结构
项目包含了基本的登录、注册、提问、搜索问题、回答、点赞、评论、关注等基本操作的设计。项目目录文件结构展示如下:
4.1功能实现目录
4.2功能实现目录
4.2前端目录
五、心得体会
通过本次的学习,以工程实践项目为基础,以各种项目视图的形式,对我们组所设计的工程时间项目进行了深入剖析。另一方面,对项目所涉及的数据结构进行了相关的设计和展示。
在这次高软博客的锻炼下,我对项目整体的结构有了更清晰的认识,且以此为基础,完善了整体项目的文件结构,学习了这方面的知识后整体工程实践进行得更加顺畅和有条理了。
在后期的项目完善阶段会将课程中所学习到的软件设计理念始终贯彻下去,让整个项目的软件架构更加清晰明了!