Spring Boot专栏九:最简单的商城系统项目的第一步——规划项目

Spring Boot专栏九:最简单的商城系统项目的第一步——规划项目


现在讲完了基础的代码内容,我们正式开始我们的项目。一个好的项目,开始并不是写代码,而应该是写一个文档,记录所有要实现的功能,并把功能的接口、变量名全部定义好,方便前后端对接。那下面我们就正式开始,实现一个最最最简单的商城系统!

画ER图

我们的项目肯定是面向对象的,因此我们要画一个ER图,即实体联系图,规划我们要用到的实体和它们之间的联系,其实也就是类。
我们简单地构建三个实体类:用户、订单和商品,画出ER图:
项目ER图
图和字有些丑,而且图画得有些问题,比如订单里不应该再写user_id,订单包含商品的关系也不该再写order_id和goods_id,订单中有个属性order_price冗余了(怪我当年数据库和软件工程两门课学得都忘了)。下面我再列一下实体类、联系类以及它们的属性,大家根据这些信息在数据库中建表:

实体类:

  1. 用户类user_:user_id, user_name, user_phone, user_password, user_wallet, register_time, login_time. 主键为user_id.
    每个属性的意义:用户id、用户名、用户手机号、用户密码、用户余额、注册时间、最后一次登录时间。
  2. 订单类order_(数据库中order是一个关键字,我们加个下划线来规避关键字):order_id, user_id, order_state, order_price, time_stamp. 主键为order_id, 外键为user_id, 连接表user_.
    每个属性的意义:订单id、订单所属用户的用户id、订单当前状态(待付款、待收货或已完成)、订单总价格、更改为当前状态的时间。
  3. 商品类goods:goods_id, goods_name, goods_price. 主键为goods_id.
    每个属性的意义:商品id,商品名、商品单价。

联系类:

  1. 订单-商品类order_goods:order_id, goods_id, goods_number. 主键为{order_id, goods_id}, 外键有两个,第一个order_id连接表order_, 第二个goods_id连接表goods.
    每个属性的意义:订单id、订单中的每个商品的商品id、该商品的数量。

规划功能

我们应该在Service层的角度考虑,针对不同实体类和联系类,分别做增删改查四个方面的考虑。另外,我们这里不考虑怎么命名,各位朋友如果是前后端合作的话,需要在此步骤中协商好对接的路径名等。
当然,我这里也只是想到啥写啥,只是把该项目当作练手的,肯定会有所疏漏,希望大家谅解。

用户类


用户类的增只有一种可能:注册账号。

  1. 注册账号:用户提供用户名(用户名不能重复)、用户密码和用户手机号;余额、时间等由系统自动生成。注意,这和专栏第六节写的add_user功能有所区别,下同,均不参考前面专栏已有的代码


在商城系统中,用户无法删除任何账号。


假设我们不让用户修改用户名,那么用户可以修改的有:

  1. 修改手机号:用户提出请求,提供密码(用来验证)和新手机号(需要判断是否是新手机号),系统提供用户id,验证成功后更改手机号;
  2. 修改密码(已知旧密码):在Service层是一个修改密码的功能,用户提出请求,提供新密码(需要判断是否是新密码),并修改密码;但在Controller层可以衍生出两个功能:
    (1) 记得旧密码:用户提出请求,提供旧密码(用来验证)、手机号(用来接收手机验证码,这部分可以简写)和新密码(需要判断是否是新密码),系统根据用户id修改密码;
    (2) 忘记旧密码:用户提出请求,提供手机号(用来接收手机验证码,这部分可以简写)和新密码(需要判断是否是新密码),系统根据用户id修改密码;
  3. 修改余额:这在Service层是一个功能,在Controller层又是可以分为两个功能:用户可以充值,也可以支付。用户提供余额,系统进行计算,如果出现数字上的问题可以反馈;(希望通过修改密码和修改余额这两个案例,大家体验一下在Service层和Controller层思考的不同之处)
  4. 修改最后一次登录时间:登录后,修改最后一次登录时间。

  1. 查询最大的用户id:用于新增id;
  2. 查询某个用户名对应的用户id:用户登录后,系统使用该用户id进行一系列操作;
  3. 根据用户id查询用户名、用户手机号、用户密码、用户余额等;
  4. 查询某个用户名是否存在:注册和登录都要用到;
  5. 根据用户名查询用户密码:用于登录。

订单类

  1. 用户完成一个订单,并立即付款:构造一个订单,并将状态改为“待收货”——如果从Controller层的角度看,该功能还牵涉到用户类的功能(更改余额)和订单-商品类的功能(添加订单-商品记录),但由于我们是在Service层规划的,因此不考虑其他类的功能;
  2. 用户完成一个订单,但不立即付款:构造一个订单,并将状态改为“待付款”。

  1. 删除订单:在Controller层又可以分为两个功能:
    (1) 取消一个待付款订单:其实在淘宝等电商平台中,这个应该是将“待付款”状态改为“已取消”。但是我们为了方便,设置为删除;
    (2) 删除一个已完成订单:删除订单。话说没有一个女朋友能够活着走出男朋友的淘宝订单,这在提示大家一定不要忘了删除订单这个功能。

  1. 更改状态(待付款->待收货);
  2. 更改状态(待收货->已完成)。

  1. 查询最大的订单id:用于新增id;
  2. 根据订单id查询所属用户、订单状态、订单总价和订单当前状态完成时间(用来展示)(和用户、商品不同的是,这里我们查询的结果是一个类。查询返回一个值还是一个类,大家可以自行选择,我这里两种都写一下);
  3. 根据用户id查询相关的订单:返回的是一个列表。

商品类


我们的商城系统是没有添加商品的功能的——后台管理系统可以有,大家有兴趣可以再写一个后台管理系统。


同样没有删除商品的功能。


同样没有修改商品的功能。

  1. 根据商品id查看商品名;
  2. 根据商品id查看商品单价。

订单-商品类

联系类在Service层也有自己的一个文件,但是它的功能都是为了辅助它联系的两个实体类,因此它没有Controller层文件。

  1. 新增订单时,会新增多个订单-商品记录,我规定每个增加只增加一条记录,若一个订单中有多件商品,则循环添加。

  1. 删除订单时,同样删除多个订单-商品记录。


不存在修改功能。

  1. 查看订单详情时,显示某个订单id对应的所有订单-商品信息。

大家可以自己再发挥,可以修改自己的类,和自己的功能,比如增加购物车类,增加商品的库存属性,以及增加相应功能。
过几天我把我列出来的上述功能先实现了,可以和大家分享一下,代码到时候贴在github上,希望大家热情讨论。

谢谢大家的阅读。

专栏第五节已经更新啦,传送门:Spring Boot专栏十:最简单的商城系统项目——代码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值