添加商品到购物车 业务层是否有 bug
来源:1-1 电商项目整体介绍
W8132455
2022-11-10 21:51:36
List<CartVO> (Integer userIdInteger productIdInteger count) {
validProduct(productIdcount)Cart cart = .selectCartByUserIdAndProductId(userIdproductId)(cart == ) {
cart = Cart()cart.setProductId(productId)cart.setUserId(userId)cart.setQuantity(count)cart.setSelected(Constant.Cart.).insertSelective(cart)} {
count = cart.getQuantity() + countCart cartNew = Cart()cartNew.setQuantity(count)cartNew.setId(cart.getId())cartNew.setProductId(cart.getProductId())cartNew.setUserId(cart.getUserId())Product productCount = Product()cartNew.setSelected(Constant.Cart.).updateByPrimaryKeySelective(cartNew)}
.list(userId)}这个在添加购物车时候,没有考虑到数据库的stock存货数量。 视频中所用的方法,业务实现合理吗? 不是应该在添加商品的时候,如果stock存货就只有十个,然后你一直添加都会可以进行添加到购物车,没有考虑数据库里的stock数量够不够。 虽然在更新购物车中,实现了对数据库中的stock判断剩余量。但是为啥在添加时候不设置这个业务需求呢?
2回答
Gavinf
2023-02-26
在postman测试【添加到购物车】时,也遇到这个问题,开始以为是我代码敲错,后来才发现问题,validProduct()方法,只对传入的数量count去和product表里的stock进行对比,所以更新购物车时,会提示库存不足,但是在添加到购物车时,就可以一直加。
可以在业务层的add()方法,先拿到产品的购物车数量+1,再传入validProduct()进行校验。
validProduct(productId, count + cartMapper.selectCartByUserIdAndProductId(userId, productId).getQuantity());
@Override
public List<CartVO> add(Integer userId, Integer productId, Integer count) {
validProduct(productId, count + cartMapper.selectCartByUserIdAndProductId(userId, productId).getQuantity());
Cart cart = cartMapper.selectCartByUserIdAndProductId(userId, productId);
if (cart == null) {
//这个商品之前不在购物车里,需要新增一个记录
cart = new Cart();
cart.setProductId(productId);
cart.setUserId(userId);
cart.setQuantity(count);
cart.setSelected(Constant.Cart.SELECTED);
cartMapper.insertSelective(cart);
} else {
//这个商品已经在购物车里了,则数量相加
count = cart.getQuantity() + count;
Cart cartNew = new Cart();
cartNew.setQuantity(count);
cartNew.setId(cart.getId());
cartNew.setProductId(cart.getProductId());
cartNew.setUserId(cart.getUserId());
cartNew.setSelected(Constant.Cart.SELECTED);
cartMapper.updateByPrimaryKeySelective(cartNew);
}
return this.list(userId);
}但是这样可能会有另外一个问题,就是在去拿产品购物车数量时,有可能抛null异常。
好帮手慕小蓝
2022-11-11
同学你好,课程中的所有业务逻辑都只是演示性质的,只是大致演示这些业务处理的流程以及技术的使用方式,并没有将业务逻辑做得十分严谨。
因为如果过度的将业务逻辑严谨化,会淡化技术的使用方式,对于教学来说是本末倒置的,不利于同学们的学习。
同学可以看到逻辑的不严谨,是值得表扬的,同学可以在自己的项目中对这部分做优化,提高自己的业务处理能力。
祝学习愉快~
相似问题