共享之舟——项目系统设计与数据库设计

共享之舟 2024-04-23 22:44:30
这个作业属于哪个课程软件工程实践-2023 学年-W 班
这个作业要求在哪里软件工程实践团队作业三
这个作业的目标根据上次答辩的建议进行修改,同时完成概要设计和数据库设计
其他参考文献《构建之法》

目录

  • 附件
  • 系统和数据库设计
  • 体系结构设计
  • 功能模块分析
  • 前台
  • 后台
  • 数据流图
  • 接口设计图
  • ER图
  • 数据表结构
  • 类图、系统安全和权限设计
  • 类图
  • 实体类图
  • 架构类图
  • 系统安全
  • 安全性
  • 健壮性
  • 权限分析
  • 改进分析
  • Q “货比三家”涉及哪些类间的关系需要调整?功能内部的实现机制是什么样的呢?
  • Q 购物车涉及哪些类,为什么类图没有看到购物车?
  • Q 前台用例图展示的功能关系嵌套是不是太多了?
  • Q 原型设计中很多组件都是悬浮固定的,这样下滑页面时遮挡问题比较严重,怎么处理这个问题?
  • Q 如果用户需要货比三家的话,需要将商品先加入购物车,才能进行比较,这是不是比较麻烦?
  • 团队绩效
  • 设计阶段
  • OKR过程
  • OKR内容
  • 答辩准备阶段
  • OKR过程
  • OKR内容
  • 贡献度
  • 第一次贡献度
  • 第二次贡献度
  • 综合贡献度
  • 记录
  • 提交记录
  • 讨论记录
  • 开发计划安排
  • 时间安排
  • 分工安排

附件

系统设计说明书
数据库设计说明书
系统设计和数据库设计答辩ppt

系统和数据库设计

体系结构设计

在这里插入图片描述

功能模块分析

前台

在这里插入图片描述

后台

在这里插入图片描述

数据流图

在这里插入图片描述

接口设计图

在这里插入图片描述

ER图

根据先前的需求分析,我们将ER图分为前台和后台两个部分,包含用户模块、店铺模块、商品模块、专业模块、聊天模块、交易信息模块、评价模块、标签模块、图片模块、购物车模块、键模块、后台人员模块、退款信息模块、审核信息模块、举报信息模块、身份模块、权限模块。

在这里插入图片描述

用户实体

在这里插入图片描述


店铺实体

在这里插入图片描述

商品实体

在这里插入图片描述

专业实体

在这里插入图片描述

聊天实体

在这里插入图片描述

交易信息实体

在这里插入图片描述

评价实体

在这里插入图片描述

标签实体

在这里插入图片描述

图片实体

在这里插入图片描述

购物车实体

在这里插入图片描述

键实体

在这里插入图片描述

后台人员实体

在这里插入图片描述

退款信息实体

在这里插入图片描述

审核信息实体

在这里插入图片描述

举报信息实体

在这里插入图片描述

身份实体

在这里插入图片描述

权限实体

在这里插入图片描述

数据表结构

在这里插入图片描述

用户
用户表:id:用户的唯一标识。name:用户的姓名。email:用户的电子邮件地址,用于账号注册、找回密码等。phone:用户的电话号码,便于联系或验证身份。password:用户的加密密码,确保账号安全。major_time:关联major表,表示用户的专业friendliness:表示用户的友好度。credit:表示用户的信用度。

在这里插入图片描述

店铺
店铺表:id:店铺的唯一标识。name:店铺名称。user_id:关联user表,表示店铺的拥有者。

在这里插入图片描述

商品管理
商品表:id:商品的唯一标识。name:商品的名称。description:商品的详细描述,包括品牌、新旧程度、功能特点等。price:商品的售价。moderate_id:与users表关联的外键,表示商品所属的用户。shop_id:购买者的id。is_active:商品是否在出售。

在这里插入图片描述


在这里插入图片描述

举报
举报表:id:举报信息的唯一标识。reporter_id:提出举报的用户id。reason:举报的理由。generate_time:提出举报的时间。handle_time:处理时间。user_id:被举报用户的唯一标识。commodity_id:表示被举报的商品的唯一标识。review_id:表示被举报的评论的唯一标识。result_id:关联report_result表,表示处理的结果。

在这里插入图片描述

后台用户
后台用户表:id:用户的唯一标识。name:用户的姓名。email:用户的电子邮件地址,用于账号注册、找回密码等。phone:用户的电话号码,便于联系或验证身份。password:用户的加密密码,确保账号安全。image_id:连接image表,表示用户头像。

在这里插入图片描述

交易
交易表:id:交易订单的唯一标识。trade_time:交易时间。trade_place:交易地点。trade_status:交易状态。user_id:用户的唯一标识。commodity_id:关联商品表,商品的唯一表示。

在这里插入图片描述

退款
退款表:id:退款申请的唯一标识。generate_time:申请时间。handle_time:处理时间。status:当前状态。trade_id:关联交易表,交易的唯一标识。backend_user_id:关联后台用户表,表示处理该申请的后台用户。

在这里插入图片描述

评论
评论表:id:评论的唯一标识。friendliness:友好度。credit:信用分。from:评价人。to:被评价的人。content:评价内容。star:评价的等级。time:评价的时间。trade_id:关联trade表,表示被评价的交易。moderate_id:关联moderate表,表示处理该评论的后台用户。

在这里插入图片描述

类图、系统安全和权限设计

类图

实体类图

在这里插入图片描述

架构类图

在这里插入图片描述

  1. Controller层
    Controller层接收前端的http请求,因此以接口的url进行大体分类,这里因为篇幅限制,并未给出所有的Controller。

    在这里插入图片描述

  2. Service层
    Controller层与Service层为一一对应关系。

    在这里插入图片描述

  3. Mapper层
    Mapper与数据库中的非关系表为1:1对应关系,这里因为篇幅限制,并未给出所有的Mapper。

    在这里插入图片描述

  4. Security Layer
    由基础的配置类、对应的Security接口,还有一些其他的安全类(IFilterBlacklistFilter)组成,共同维护系统安全。

    在这里插入图片描述

系统安全

安全性

  1. 跨站请求伪造 (CSRF):
    CSRFSecurity类:启⽤ CSRF 防护,在 Spring Boot 应⽤程序的配置中,可以通过配置csrf().disable() 来禁⽤ CSRF 保护,或者使⽤默认的启⽤ CSRF 保护。

    在这里插入图片描述

  2. 跨站脚本攻击 (XSS):
    InputSecurity、OutputSecurity类:对⽤户输入进⾏有效的输入验证和输出转义,确保⽤户输入的内容不会被作为原始 HTML 渲染。具体做法:使⽤合适的 HTML 编码来转义⽤户输入,例如将 < 替换为 <,将 > 替换为 >。在前端和后端都实施输入验证,限制⽤户输入的内容,避免恶意脚本注入。

    在这里插入图片描述


    在这里插入图片描述

  1. Session 攻击、会话劫持:
    SecurityConfig类:可以配置会话管理策略来限制会话的有效性和安全性,例如设置会话超时时间、启⽤会话固定保护、禁⽤ URL 重写等。

    在这里插入图片描述

  2. SQL 注入:
    SQL注入是一种常见的网络安全攻击技术,攻击者利用该技术向应用程序的数据库发送恶意的SQL查询,以执行未经授权的操作或获取敏感数据。
    解决方案:使⽤ MyBatis 的 @Param 注解来传递参数。如下图所示。

    在这里插入图片描述

  3. DDoS 攻击:
    使⽤防火墙、负载均衡器等网络安全设备来识别和过滤恶意流量。
    IPBlacklistFilter类:使⽤流量限制、IP 黑名单、基于规则的访问控制等技术来限制对系统的访问。
    考虑使⽤云服务提供商的 DDoS 防护服务,以及使⽤ CDN(内容分发网络)来分散和缓解攻击流量。

    在这里插入图片描述

  4. 密码加密
    流程如下:

    在这里插入图片描述

  5. CORS问题
    首先在后端配置类中添加CorsFilter类来允许所有的请求来源、请求⽅法和请求头,并且允许带有认证信息的请求。

    在这里插入图片描述


    然后通过配置Vue.js的axios库来确保在发送请求时不会产生OPTIONS预检请求。

    在这里插入图片描述


    最后确保正确地发送请求,例如:

    在这里插入图片描述

健壮性

和安全性不同的是,健壮性是出了错误或者异常,程序仍然能够进⾏下去的能力。

  1. 异常处理:
    系统在遇到异常情况时记录异常信息并返回适当的错误信息给前端。

  2. 数据库连接池配置:
    合理配置数据库连接池,提高管理数据库连接资源的有效性

  3. 数据验证:
    在控制器层或服务层对输入数据进⾏有效性验证,避免恶意输入或不合法数据对系统造成
    影响。

  4. 日志记录:
    记录系统运⾏时的日志⽤于排查问题、监控系统运⾏状态,并及时发现异常。

    在这里插入图片描述

  5. 数据库事务管理:
    使⽤事务管理功能来确保操作的原子性和⼀致性。

    权限分析

  6. 角色定义:
    审核员:负责审核发布的商品信息和审核⽤户发布的评论。
    客服:处理⽤户的举报和退款,并且与客户进⾏交流。
    管理员:拥有最高权限,可以查看所有数据、管理⽤户和分配权限。

  7. 权限定义:
    商品审核:对⽤户提交的商品信息进⾏审核
    评论审核:对⽤户在交易或者商品下发表的评论进⾏审核
    处理退款:对⽤户提交的商品退款进⾏审核和处理
    处理举报:对⽤户提交的关于商品、评论或者⽤户的举报进⾏审核和处理
    聊天:对⽤户客服请求与⽤户进⾏交流
    查看数据:可以查看平台所有的数据,包括交易信息、⽤户信息、商品信息等
    管理⽤户:可以手动新增⽤户或者删除⽤户
    分配权限:可以管理后台人员的权限

  8. 数据库表设计:
    ⽤户表(user):id(主键)username(⽤户名)password(密码)role_id(外键,关
    联到角色表)
    角色表(role):id(主键)role_name(角色名称)
    权限表(power):id(主键)permission_name(权限名称)
    ⽤户角色关联表(user_role):user_id(外键,关联到⽤户表)role_id(外键,关联到
    角色表)
    角色权限关联表(role_power):role_id(外键,关联到角色表)power_id(
    外键,关联到权限表)

  9. 实现⽤户认证和授权:
    使⽤ Spring Security 进⾏⽤户的身份认证和授权,结合 JWT 进⾏ token 管理和⽤
    户会话管理。
    配置合适的认证提供者、⽤户DetailsService,以及安全过滤器链等来实现⽤户的登录
    认证和权限控制。

  10. 编写业务逻辑:
    根据⽤户的角色和权限信息,编写业务逻辑来限制⽤户对资源的访问。例如,在发布
    商品时,普通⽤户可以发布商品,但是后台⽤户和管理员⽤户不具备此权限。

  11. 管理界面:
    提供管理界面供管理员进⾏⽤户管理、查看数据、分配权限的操作,确保管理员⽤户
    能够⽅便地管理系统。

  12. 审核与优化:
    审核权限设计⽅案,确保安全性和完整性,对于可能存在的安全漏洞和权限缺失进⾏
    修复。
    根据实际应⽤情况对权限系统进⾏优化和调整,提升系统的性能和⽤户体验。

  13. 定期维护:
    定期对权限系统进⾏维护和更新,包括添加新的角色和权限、移除过期或无⽤的角色
    和权限、修复已知的安全漏洞等。
    确保权限系统与业务需求保持同步,并及时响应⽤户的反馈和需求变化。

    在这里插入图片描述

改进分析

Q “货比三家”涉及哪些类间的关系需要调整?功能内部的实现机制是什么样的呢?

A:我们更新了对应的类图:

在这里插入图片描述

一个商品具有多个CompareValue,如原型中的下图中的表,Commodity含有多个CompareValue,这些Pair的实例依次是:

在这里插入图片描述

当前商品的CompareValue对象包含:keyvalueString
一个CompareValue对象价格¥60
一个CompareValue对象卖家信用分4.2
一个CompareValue对象卖家友好度4.7

用户在ShoppingCart进行了商品多选之后,执行compareCommodities操作,ShoppingCart新建一个CompareTable对象,然后遍历所有选择的商品,将这些商品的CommodityValue进行连接,形成一个比较表格,然后找出所有的key,为每一个key生成一个CompareItem。例如将所有key="价格"的value放在一行里。
如果没有对应的value(例如有一个商品没有key=“使用程度”的CompareValue,但另外一个商品有key=“使用程度”的CompareValue,连接之后会出现空白),则显示一个跳转至聊天界面的超链接,此时买家可以联系卖家填充信息,填充的信息将会放入商品本身的CompareValue里,即使当前买家没有购买意愿,下一位买家也能看到当前买家提醒卖家填充的信息,实现信息的高效交流。

Q 购物车涉及哪些类,为什么类图没有看到购物车?

A:在需求分析的过程中,我们有考虑,闲鱼等二手交易平台本身是不配备批量交易(例如:购物车)的功能的,可能只有“喜欢列表”这个暂存平台。但在原型设计过程中,我们考虑到,对于一部分购物发烧友而言,购物车确实能够满足他们的需要,而且维护这个功能也比较简单,所以便保留了购物车这个内容。但是后续忘记更新类图了,因此,我们对类图进行了以下修改:
新增了购物车(ShoppingCart)这个类,组合到前台用户,支持选择商品、进行交易、删除商品、货比三家等操作。

在这里插入图片描述

Q 前台用例图展示的功能关系嵌套是不是太多了?

A:是的,这样可能会模糊核心用况,同时让类图更难理解,因此我们修改了前台类图,删去了不重要的浏览界面等用况,大大减少了include嵌套。以下是修改后的结果:

在这里插入图片描述

Q 原型设计中很多组件都是悬浮固定的,这样下滑页面时遮挡问题比较严重,怎么处理这个问题?

A:我们修改了页面,虽然页面仍然是浮动的,但是遮挡的问题减少了很多。当鼠标没有在导航栏上时,中间的logo消失。

在这里插入图片描述

当鼠标移入导航栏时,出现导航界面,同时导航界面也添加了文字,使得导航内容更加清晰明了。

在这里插入图片描述

Q 如果用户需要货比三家的话,需要将商品先加入购物车,才能进行比较,这是不是比较麻烦?

A:货比三家一定要有一个暂存区,而我们首先想到的是购物车,在了解到一部分用户的需求后,我们进行了一次调研,调研结果如下:

在这里插入图片描述


在所有的41份答卷中,有65%认为货比三家内置于购物车中比较好,理由包括:购物车作为留存商品的主要界面,选取商品更加方便,而单独的界面往往操作成本更高;还有的认为,在货币三家中专门对商品进行分类,反而难以进行自由的比较。因此,我们团队最终决定保留购物车中的货比三家。

在这里插入图片描述


在这里插入图片描述

团队绩效

设计阶段

OKR过程

在这里插入图片描述

OKR内容

在这里插入图片描述

答辩准备阶段

OKR过程

在这里插入图片描述

OKR内容

在这里插入图片描述

贡献度

贡献度通过OKR(60)+项目额外工作(20)+团队额外工作(20)确定。

第一次贡献度

在这里插入图片描述

第二次贡献度

在这里插入图片描述

综合贡献度

成员第一轮分数(5)第二轮分数(5)贡献度
熊桂根57.3333333356.8333333315.21%
陈智翔70.666666675717.00%
陈卓杨575715.18%
戴聪57.3333333357.1666666715.25%
蓝有润76.6666666790.3333333322.24%
谢凌云56.6666666756.8333333315.12%
总计375.6666667375.1666667

记录

提交记录

在这里插入图片描述

在这里插入图片描述

讨论记录

在这里插入图片描述


在这里插入图片描述

开发计划安排

时间安排

在这里插入图片描述

分工安排

成员分工α冲刺更新讨论β冲刺
陈卓杨项目经理与开发人员沟通,确保用户界面符合需求
协调团队工作,确保项目按时完成
参与文档和ppt设计
组织更新会议
调研用户反馈
整理归纳更新内容
与开发人员沟通,确保用户界面符合需求
协调团队工作,确保项目按时完成
参与文档和ppt设计
戴聪前端负责用户界面、登陆、首页、交易模块的前端开发与设计从前台界面的角度,定位优化的空间
进行vue的高阶学习
对于用户界面、登陆、首页、交易模块,修复已有的bug,优化代码结构
实现后续的更新内容的前端部分
谢凌云前端负责客服、审核、管理员、聊天模块的前端开发与设计从后台界面的角度,定位优化的空间
进行vue的高阶学习
对于客服、审核、管理员、聊天模块,修复已有的bug,优化代码结构
实现后续的更新内容的前端部分
熊桂根后端负责用户界面、登陆、首页、交易模块的后端开发与设计寻找数据库和算法的优化空间
学习springboot的高阶代码
对于用户界面、登陆、首页、交易模块,修复已有的bug,优化代码结构
优化数据库结构和算法
实现后续的更新内容的后端部分
蓝有润后端负责客服、审核、管理员、聊天模块的后端开发与设计寻找数据库和算法的优化空间
学习springboot的高阶代码
对于客服、审核、管理员、聊天模块,修复已有的bug,优化代码结构
优化数据库结构和算法
实现后续的更新内容的后端部分
陈智翔测试负责对前后端的测试,确保各项功能正常运作
测试评价举报、登陆、首页、聊天等模块,报告错误和问题
在项目前期,尽可能参与前后端的设计
根据软件测试结果,找到项目潜在的bug
深入学习软件质量测试
负责对前后端的测试,确保各项功能正常运作
测试新的模块,报告错误和问题
在项目前期,尽可能参与前后端的设计
...全文
192 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
FZU_SE_teacherW 教师 04-24
  • 打赏
  • 举报
回复

数据流图中的表示数据存储的图例有误,与外部实体一样了,应该是用双划线表示详见:https://cloud.tencent.com/developer/article/2247936%EF%BC%8Chttps://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E6%B5%81%E5%9B%BE/4136477?fr=ge_ala
OKR方案很赞!

助教郑至博 助教 04-24
  • 打赏
  • 举报
回复

博客写的很不错,作业完成度很高,继续加油

300

社区成员

发帖
与我相关
我的任务
社区描述
福州大学的软件工程实践-2023学年-W班
软件工程需求分析结对编程 高校 福建省·福州市
社区管理员
  • FZU_SE_teacherW
  • Pity·Monster
  • 助教张富源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧