A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

©   /  2018-6-23 18:01  /  1606 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

常小天
今天继续商城实战,新学习了一个工厂+反射+配置文件解耦合的方法。之后就是常规的商城代码的编写,所以就只总结一下业务逻辑。
在之前的案例中,我们都是在servlet和service中直接new下一层级的对象再调用方法。这样做会使程序具有侵入性,耦合性高,维护难度大。为了解决这一问题,我们将new的操作移到工厂中进行,将之前程序之间的耦合性转移到了工厂中,一定程度的降低了维护难度,但程序间的耦合性依然存在。所以我们进一步引入了反射和配置文件来解决这一问题。在配置文件中将不同实现类的全限定名和不同的id绑定起来,在工厂中解析配置文件,从配置文件中获得实现类的全限定名,这样就可以利用反射创建实现类的实例,在将实例返回给调用方法的位置。这样,在程序中我们只用调用工厂的静态方法来获得实例,当实现类改变的时候只用修改配置文件即可。
购物模块的业务逻辑比较复杂。当我们在商品详情页面点击加入购物车后,访问servlet,并同时传递商品id和购买数量两个参数。在servlet中,获得商品id和购买数量后先封装进购物项对象,购物项对象中包含商品实体类对象、购买数量和小计,这里小计通过计算获得。购物项对象封装好了之后,将购物项对象再添加进购物车对象的购物项集合中。购物车对象中包含购物项集合和总计两个成员。总计通过累加购物项的小计获得。添加完之后将购物车对象存入session,之后每次添加商品进购物车的时候都先从session中获得购物车对象,没有在新建。一件新商品添加进购物车的时候先判断购物车中是否已经有这种商品,如果有则直接在购物项中增加数量即可,如果没有在按照上面的步骤进行添加。
在购物车页面点击删除单个购物项时,会携带pid访问servlet,在servlet中调用购物车实体类的删除单个项的方法并将pid传参即可,方法的实现就是map集合中根据key删除元素。在购物车页面点击清空购物车时,直接访问servlet中的清空方法,servlet在调用购物车实体类的清空购物车方法,方法的实现就是map集合的clear方法。
订单模块的业务逻辑也比较复杂。当我们点击提交订单之后。首先我们可以先判断一下session中有没有购物车对象,以及用户有没有登录。只有两个都满足我们才进行后面的操作。当满足要求时,我们要对订单数据进行封装。订单的实体类中包含订单id、订单时间、订单状态和订单项集合。前三个很简单,复杂的是订单项集合的封装。封装订单项集合时,我们要获得购物车对象,从购物车对象中获得购物项集合,遍历购物项集合,将其中的每一个购物项的信息搬进订单项对象中,每完成一个就往订单项集合中添加一个,添加完所有的订单项后,要清空购物车,之后将订单对象存入数据库,同时将订单对象存入域中,在进行页面跳转。当然在将订单对象存入数据库的时候要注意订单信息复杂,一部分存入订单表,另一部分要存入订单项表。此时应设置事务管理,保证两个表中都存好信息才算成功。之后就可以在jsp页面显示订单信息了。从域中获得订单对象,遍历订单项集合并输出即可。

点评

发表于 2019-7-21 00:38
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马