关于封装的重要性
1.问题描述
在测试的过程中,前期的偷懒会被无线的放大,有bug的时候,前期偷懒复制粘贴懒得封装,出了问题,要改很多地方,拿我手上这个项目就是,有美食,商城,酒店,多平台结合,在生成订单的时候不应该在各自的serviceImpl里面去对订单初始化的,应该直接就把初始化这部分也定义到orderServiceImpl的insert里面去
//预定酒店
@Override
public int reserve(Long roomId, Long userId) {
HotelRoom hotelRoom=hotelRoomMapper.selectHotelRoomById(roomId);
//获取商家id
Long merchantId=hotelMapper.selectHotelById(hotelRoom.getHotelId()).getMerchantId();
//创建订单
Order order=new Order();
order.setType("hotel");
//生成订单号
String orderNo = "ORD-" + System.currentTimeMillis() + "-" + userId;
order.setOrderNo(orderNo);
order.setStatus(Order.STATUS_UNPAID);//待支付
order.setRoomId(roomId);
order.setUserId(userId);
order.setMerchantId(merchantId);
//查询用户会员等级
MemberShip memberShip=memberShipMapper.getMemberShipByUserId(userId);
Long level=memberShip.getMemberLevel();
//根据酒店价格查询最低会员等级
Long minLevel= Long.valueOf(memberLevelRuleService.calculateMemberLevel(hotelRoom.getPrice()));
if (level >= minLevel) {//if用户等级>=calculateMemberLevel,订单押金0.99
order.setDeposit(BigDecimal.valueOf(0.99));
//使用会员首单折扣
if(!memberShip.getIsUse()){
int percent=memberLevelRuleService.selectMemberLevelRuleByLevel(level).getPercent();
order.setPrice(hotelRoom.getPrice().multiply(BigDecimal.valueOf(percent)));
memberShip.setIsUse(true);
}
//更新会员表
memberShipMapper.updateMemberShip(memberShip);
}
order.setPrice(hotelRoom.getPrice());
return orderService.insertOrder(order);
}
因为来自不同平台的订单初始化的内容有小部分不同,当时也没站在那么高的高度去看,而是写了这个就不管了,等到后面发现其他平台也有一套订单流程,我直接复制粘贴了,实际上,关于前面
//创建订单
Order order=new Order();
order.setType("hotel");
//生成订单号
String orderNo = "ORD-" + System.currentTimeMillis() + "-" + userId;
order.setOrderNo(orderNo);
order.setStatus(Order.STATUS_UNPAID);//待支付
order.setRoomId(roomId);
order.setUserId(userId);
order.setMerchantId(merchantId);
这种初始化操作应该写到insertOrder里面去的,然后给insertOrder多加一个参数type
insertOrder(order,type)
然后里面把共同操作比如生成订单号放外面,其他不一样的操作在共同操作之前进行switch分别操作
2.总结
尽量的解耦,不要把订单相关的操作放在别的service层,hotelserviceImpl应该专注的做酒店的业务,而不是参杂了一些orderservice该做的事
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小刘
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果