加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

业务复杂=if else?刚来的大神竟然用策略+工厂彻底干掉了他们!

发布时间:2019-10-30 15:10:36 所属栏目:建站 来源:漫话编程
导读:【大咖·来了 第7期】10月24日晚8点寓目《智能导购对话呆板人实践》 对付营业开拓来说,营业逻辑的伟大是肯定的,跟着营业成长,需求只会越来越伟大,为了思量到各类百般的环境,代码中不行停止的会呈现许多if-else。 一旦代码中if-else过多,就会大大的影
副问题[/!--empirenews.page--] 【大咖·来了 第7期】10月24日晚8点寓目《智能导购对话呆板人实践》

营业伟大=if else?刚来的大神竟然用计策+工场彻底干掉了他们!

对付营业开拓来说,营业逻辑的伟大是肯定的,跟着营业成长,需求只会越来越伟大,为了思量到各类百般的环境,代码中不行停止的会呈现许多if-else。

一旦代码中if-else过多,就会大大的影响其可读性和可维护性。

营业伟大=if else?刚来的大神竟然用计策+工场彻底干掉了他们!

起首可读性,不问可知,过多的if-else代码和嵌套,会使阅读代码的人很难领略到底是什么意思。尤其是那些没有注释的代码。

其次是可维护性,由于if-else出格多,想要新加一个分支的时辰,就会很难添加,极其轻易影响到其他的分支。

笔者曾经看到过一个付出的焦点应用,这个应用支持了许多营业的线上付出成果,可是每个营业都有许多定制的需求,以是许多焦点的代码中都有一大坨if-else。

每个新营业必要定制的时辰,都把本身的if放到整个要领的最前面,以担保本身的逻辑可以正常执行。这种做法,效果可想而知。

着实,if-else是有步伐可以消除去的,个中较量典范的而且行使普及的就是借助计策模式和工场模式,精确的说是操作这两个计划模式的头脑,彻底没落代码中的if-else。

本文,就团结这两种计划模式,先容怎样消除if-else,而且,还会先容怎样和Spring框架团结,这样读者看完本文之后就可以当即应用到本身的项目中。

本文涉及到一些代码,可是作者只管用普通的例子和伪代码等情势使内容不那么死板。

恶心的if-else

假设我们要做一个外卖平台,有这样的需求:

1、外卖平台上的某家店肆为了促销,配置了多种会员优惠,个中包括超等会员折扣8折、平凡会员折扣9折和平凡用户没有折扣三种。

2、但愿用户在付款的时辰,按照用户的会员品级,就可以知道用户切合哪种折扣计策,进而举办打折,计较出应付金额。

3、跟着营业成长,新的需求要求专属会员要在店肆下单金额大于30元的时辰才可以享受优惠。

4、接着,又有一个失常的需求,假如用户的超等会员已经到期了,而且到期时刻在一周内,那么就对用户的单笔订单凭证超等会员举办折扣,并在收银台举办强提示,引导用户再次开通会员,并且折扣只举办一次。

那么,我们可以看到以下伪代码:

  1. public BigDecimal calPrice(BigDecimal orderPrice, String buyerType) { 
  2.  
  3.     if (用户是专属会员) { 
  4.         if (订单金额大于30元) { 
  5.             returen 7折价值; 
  6.         } 
  7.     } 
  8.  
  9.     if (用户是超等会员) { 
  10.         return 8折价值; 
  11.     } 
  12.  
  13.     if (用户是平凡会员) { 
  14.         if(该用户超等会员刚逾期而且尚未行使过姑且折扣){ 
  15.             姑且折扣行使次数更新(); 
  16.             returen 8折价值; 
  17.         } 
  18.         return 9折价值; 
  19.     } 
  20.     return 原价; 

以上,就是对付这个需求的一段价值计较逻辑,行使伪代码都这么伟大,假如是真的写代码,那伟大度可想而知。

这样的代码中,有许多if-else,而且尚有许多的if-else的嵌套,无论是可读性照旧可维护性都很是低。

那么,怎样改进呢?

计策模式

接下来,我们实行引入计策模式来晋升代码的可维护性和可读性。

起首,界说一个接口:

  1. /** 
  2.  * @author mhcoding 
  3.  */ 
  4. public interface UserPayService { 
  5.  
  6.     /** 
  7.      * 计较应付价值 
  8.      */ 
  9.     public BigDecimal quote(BigDecimal orderPrice); 

接着界说几个计策类:

  1. /** 
  2.  * @author mhcoding 
  3.  */ 
  4. public class ParticularlyVipPayService implements UserPayService { 
  5.  
  6.     @Override 
  7.     public BigDecimal quote(BigDecimal orderPrice) { 
  8.          if (斲丧金额大于30元) { 
  9.             return 7折价值; 
  10.         } 
  11.     } 
  12.  
  13. public class SuperVipPayService implements UserPayService { 
  14.  
  15.     @Override 
  16.     public BigDecimal quote(BigDecimal orderPrice) { 
  17.         return 8折价值; 
  18.     } 
  19.  
  20. public class VipPayService implements UserPayService { 
  21.  
  22.     @Override 
  23.     public BigDecimal quote(BigDecimal orderPrice) { 
  24.         if(该用户超等会员刚逾期而且尚未行使过姑且折扣){ 
  25.             姑且折扣行使次数更新(); 
  26.             returen 8折价值; 
  27.         } 
  28.         return 9折价值; 
  29.     } 

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读