1.营销场景用户通过积分这些返利积分兑换商品;
1.优惠劵接口:CouponResult endCoupon(String uId,String couponNumber,String uuid);
2.实物商品:Boolean deliverGoods(DeliverRed req);
3.第三方兑换卡 void grandToken(String bindMobileNumber,String cardId);
以上接口来看,有如下信息。
三个接口返回类型不同,有对象类型,布尔类型和空类型。
入参不同,发放优惠劵需要防重,兑换卡需要ID,实物商品需要发货位置。
可能会随着后续业务的法杖,新增其他的商品类型。应为所有的开发需求都是由业务对市场的拓展带来的。
解决方案一:如果直接用if else可以直接解决,如果后续的迭代中要实现迭代,使用越久,测试回归验证时间越长,带来的风险也会越高。
解决方案二:
定义一个发奖接口:对于所有的奖品,无论是实物商品,优惠劵还是第三方兑换卡,都需要通过程序实现此接口并处理,这样的方式可以保证入参和出参的统一性。
接口入参包括用户ID,奖品ID,业务ID,及扩展字段extMap;
实现三种发奖接口,
创建工厂类getCommodityService
一种是依赖奖品类型,另一种根据奖品类信息进行实例化。
例如后续如果有非常多的奖品类型,实现的子类需要技术扩张,因此需要使用其他的模式进行优化。