Heim > Backend-Entwicklung > PHP-Tutorial > 关于分支过多的情况处理???

关于分支过多的情况处理???

WBOY
Freigeben: 2016-06-06 20:19:33
Original
1433 Leute haben es durchsucht

关于条件分支过多的情况,有什么好的、比较通用的解决方案?下面这个例子来说明一下情况

<code>//购物车中的一个商品
$data = [];

//判断是否上架
if()
{
    //判断库存是否足够
    if()
    {
        //判断是否有优惠活动
        if()
        {
            //有优惠活动
            if()
            {
                if()
                {
                    //计算活动库存是否足够
                }
                else
                {
                    //不够活动库存
                }
            }
            else
            {
                //不写了,这么多分支,足够说明情况了
            }
        }
        else
        {
            //无优惠活动
            if()
            {
                //vip计算,
                if()
                {
                    //金卡-100
                }
                else if()
                {
                    //银卡-200
                }
                else
                {
                    //普卡-50
                }
            }
            else
            {
                //普通会员,按商品原价计算
            }
        }
    }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

回复内容:

关于条件分支过多的情况,有什么好的、比较通用的解决方案?下面这个例子来说明一下情况

<code>//购物车中的一个商品
$data = [];

//判断是否上架
if()
{
    //判断库存是否足够
    if()
    {
        //判断是否有优惠活动
        if()
        {
            //有优惠活动
            if()
            {
                if()
                {
                    //计算活动库存是否足够
                }
                else
                {
                    //不够活动库存
                }
            }
            else
            {
                //不写了,这么多分支,足够说明情况了
            }
        }
        else
        {
            //无优惠活动
            if()
            {
                //vip计算,
                if()
                {
                    //金卡-100
                }
                else if()
                {
                    //银卡-200
                }
                else
                {
                    //普卡-50
                }
            }
            else
            {
                //普通会员,按商品原价计算
            }
        }
    }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

早返回:把否定的/能返回的分支提前

例子

<code class="php">//BAD:

//判断是否上架
if()
{
  //判断库存是否足够
  if()
  {
     xxx
  }
}


//GOOD:

if(!上架) {
  return 报错(没上架!);
}
if(!库存足够) {
  return 报错(没库存!);
}

xxx</code>
Nach dem Login kopieren

抽取方法

<code>//BAD: 
//判断是否有优惠活动
if()
{
    //有优惠活动
    if()
    {
        if()
        {
            //计算活动库存是否足够
        }
        else
        {
            //不够活动库存
        }
    }
    else
    {
        //不写了,这么多分支,足够说明情况了
    }
}

//GOOD

price = 计算优惠(user, item)


function 计算优惠(user, item) {
    if(优惠 = 获取优惠(user, item)) {
        return 优惠.计算价格(item.price);
    }

    if(VIP = 获取VIP会员(user)) {
        return VIP.打折(item)
    }

    return item.price;
}</code>
Nach dem Login kopieren

职责链

就说电商活动的场景,优惠叠加/互斥,积分啊什么的需求可能复杂到抽方法也理不清楚,这时候可能就要把结构再理清楚一点

每种改变价格/增减积分的方法都实现成职责链的一环串起来就好,每一环都有权限执行自己的逻辑,对价格进行修改,跳过其他环节等等

1.使用卫术句,提前return。
2.使用数组或字典,避免分支
3.使用设计模式

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage