關於分支過多的情況處理???

來源:互聯網
上載者:User
關於條件分支過多的情況,有什麼好的、比較通用的解決方案?下面這個例子來說明一下情況

//購物車中的一個商品$data = [];//判斷是否上架if(){    //判斷庫存是否足夠    if()    {        //判斷是否有優惠活動        if()        {            //有優惠活動            if()            {                if()                {                    //計算活動庫存是否足夠                }                else                {                    //不夠活動庫存                }            }            else            {                //不寫了,這麼多分支,足夠說明情況了            }        }        else        {            //無優惠活動            if()            {                //vip計算,                if()                {                    //金卡-100                }                else if()                {                    //銀卡-200                }                else                {                    //普卡-50                }            }            else            {                //普通會員,按商品原價計算            }        }    }}

回複內容:

關於條件分支過多的情況,有什麼好的、比較通用的解決方案?下面這個例子來說明一下情況

//購物車中的一個商品$data = [];//判斷是否上架if(){    //判斷庫存是否足夠    if()    {        //判斷是否有優惠活動        if()        {            //有優惠活動            if()            {                if()                {                    //計算活動庫存是否足夠                }                else                {                    //不夠活動庫存                }            }            else            {                //不寫了,這麼多分支,足夠說明情況了            }        }        else        {            //無優惠活動            if()            {                //vip計算,                if()                {                    //金卡-100                }                else if()                {                    //銀卡-200                }                else                {                    //普卡-50                }            }            else            {                //普通會員,按商品原價計算            }        }    }}

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

例子

//BAD://判斷是否上架if(){  //判斷庫存是否足夠  if()  {     xxx  }}//GOOD:if(!上架) {  return 報錯(沒上架!);}if(!庫存足夠) {  return 報錯(沒庫存!);}xxx

抽取方法

//BAD: //判斷是否有優惠活動if(){    //有優惠活動    if()    {        if()        {            //計算活動庫存是否足夠        }        else        {            //不夠活動庫存        }    }    else    {        //不寫了,這麼多分支,足夠說明情況了    }}//GOODprice = 計算優惠(user, item)function 計算優惠(user, item) {    if(優惠 = 擷取優惠(user, item)) {        return 優惠.計算價格(item.price);    }    if(VIP = 擷取VIP會員(user)) {        return VIP.打折(item)    }    return item.price;}

職責鏈

就說電商活動的情境,優惠疊加/互斥,積分啊什麼的需求可能複雜到抽方法也理不清楚,這時候可能就要把結構再理清楚一點

每種改變價格/增減積分的方法都實現成職責鏈的一環串起來就好,每一環都有許可權執行自己的邏輯,對價格進行修改,跳過其他環節等等

1.使用衛術句,提前return。
2.使用數組或字典,避免分支
3.使用設計模式

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.