需求的改进
系统设计
架构设计
本次团队项目采用开发框架式SSM(Spring + SpringMVC + Mybatis)
系统采用三层体系结构,分别是:
- 表示层
- WEB应用层
- 数据层
利用SpringBoot进行项目的后端开发,前端使用React框架来开发
工作架构大概是这样的:
从买家的角度来看,系统应该是这样工作的:
从卖家的角度来看,系统应该是这样工作的:
在我们的预想中,买家对待售书籍只能预订,而不能真正的成功购买。买家一旦进行预订,卖家的后台就会出现买家对待售书籍的订单,同一本待售书籍可能会对应多个订单,卖家决定卖给谁,就由买卖双方通过聊天协商决定。
数据库设计
create table user
(
id int unsigned primary key auto_increment comment '用户ID',
username varchar(20) not null comment '用户名',
password varchar(50) not null comment '密码',
nickname varchar(20) default '' comment '昵称',
email varchar(128) default '' comment '邮箱',
user_img varchar(128) default '' null comment '头像',
update_time date not null comment '更新时间',
create_time date not null comment '创建时间',
power tinyint not null default 1 comment '权限'
)default character set utf8mb4 comment '用户表';
由于用户头像的使用到的存储空间是不定的,一般不将用户头像存储在数据库中,所以将用户头像定义成一个URL,这样未来租用阿里云的对象存储服务OSS就可以用URL加载头像。
另外,我们的二手交易平台最终不仅仅要有普通的用户,还会有管理员用户来管理平台的运行。所以用户之间会有权限的差异,所以定义管理权限字段。
书籍表单设计
我们打算做书籍分类功能,所以需要一个记录书籍分类的表单
create table book_type
(
id int unsigned primary key auto_increment comment '类别ID',
name varchar(20) not null comment '类别名'
)default character set utf8mb4 comment '书籍类别';
关于待售书籍,我们设计这样一个表单来存储信息:
create table book
(
id int unsigned primary key auto_increment comment '书籍ID',
name varchar(50) not null comment '书籍名称',
type_id int unsigned not null comment '类别',
price decimal(12, 2) not null comment '价格',
isbn varchar(20) not null comment 'ISBN号',
img varchar(128) null comment '头像',
detail varchar(500) default '' null comment '书籍描述',
release_time date not null comment '上架时间',
seller_id int unsigned not null comment '卖家ID',
purchased int not null comment '是否已被购买',
constraint type foreign key (type_id) references book_type(id),
constraint seller foreign key (seller_id) references user(id)
)default character set utf8mb4 comment '待售书籍';
平台只负责管理待售的书籍,而不会试图去管理用户不再想要售卖的书籍或者已经卖出去的商品,所以需要 purchased
字段来标识。但这样子就是说,用户每挂售一个书籍,就只支持一次交易,这样做是考虑到我们面向的个人卖家和个人买家,而不是专门面向二手书售卖商。
订单表单设计
create table `order`
(
id int unsigned primary key auto_increment comment '订单ID',
user_id int unsigned not null comment '用户ID',
book_id int unsigned not null comment '书籍ID',
pay_time date not null comment '下单时间',
address varchar(100) not null comment '收货地址',
status tinyint not null comment '订单状态',
constraint buyer foreign key (user_id) references user(id),
constraint want_book foreign key (book_id) references book(id)
)default character set utf8mb4 comment '订单';
买家管理自己买某些书的意愿
卖家可以查看自己卖了哪些书,并可以查看有哪些人希望买这本书。
卖家通过书籍ID去查找买家;买家可以通过用户ID查看自己想要买哪些书。
聊天记录表单设计
还在设计中
表单之间的关系
ER图:
erDiagram USER ||--o{ BOOK : sell USER ||--o{ BOOK : purchase USER ||--o{ ORDER : purchase BOOK ||--|| TYPE : belongTo USER { id int username string password string nickname string email string userImg url updateTime date createTime date power int } BOOK { id int name string price double isbn string img url detail string releaseTime date sellerId int purchased bool } ORDER { id int buyerId int bookId int payTime date address string status int } TYPE { id int name string }接口文档设计
本次项目采用前后端分离的架构,所以前端和后端之间需要一个开发共识,就是接口文档。
我们为每一个接口进行了详细的设计,以便于开发的流畅。
由于接口文档过于冗长,所以我们编写了另外一篇随笔用来展示接口文档:
工具的使用
本次Alpha冲刺中,我们采用Apifox这个工具用作接口的开发和测试
使用git作为版本管理工具
使用docker进行项目运行环境的部署
后端使用IDEA进行Java代码的编写(使用到了SpringBoot,Mybatis,Spring,SpringMVC,MySQL,Redis)
前端时候JS框架React,并使用AntDesign这个组件库