亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java代碼多分支語句優化

Java代碼多分支語句優化

當年話下 2019-03-27 22:19:07
1.項目背景一個controller,一個serivce,多個dao層service里面更具用戶的不同參數調用不同的dao進行實例化,時候在調用方法。2.不要問為什么設計,那是因為一個模塊對應37張表,用戶根據下拉選擇輸入不同的表單(說白點,點擊頁面新增彈出下拉框,讓用戶選擇填寫那張表單,再來一句,各個表之間沒有相同的字段),所以此模塊肯定是一個controller,一個service,各個dao對應不同的表進行增刪改查操作3.所以在service層必然有一個語句需要判斷實例化那個dao,用注入也行if(flag == dao1){}else if(flag == dao2){}else if(flag == dao3){}else if(flag == dao4){}else if(flag == dao5){}else if(flag == dao6){}........就要寫25個(不管是switch還是if都避免不了)4.所以這樣的方式有沒有好一點的方式進行處理,不用寫這么多的判斷。
查看完整描述

7 回答

?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

我覺得應該,從前端把dao的不重復名字,通過反射調用Dao層會很好;
僅僅是個念頭。

查看完整回答
反對 回復 2019-04-17
?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

既然你問題里已經有好幾句“不要問”“肯定是”這樣的肯定句,那也不好說什么了??梢栽囋嚬S模式或管理者模式,根據flag值獲取對應的dao實例(其實只是把這段丑陋的代碼挪到一個陰暗的小角落)。


查看完整回答
反對 回復 2019-04-17
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

多態,或表驅動模式(參考代碼大全第十八章)


查看完整回答
反對 回復 2019-04-17
?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

項目結構問題。想想java的特征。封裝。繼承多態


查看完整回答
反對 回復 2019-04-17
?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

我會建一個map
map.put("dao1",dao1);
map.put("dao2",dao2);
map.put("dao3",dao3);
然后通過頁面的參數選擇map的key,獲得dao
當然如果你用的是spring, 這個map可以直接配置在spring xml里

查看完整回答
反對 回復 2019-04-17
?
DIEA

TA貢獻1820條經驗 獲得超3個贊

我記著if else和switch case語句都可以用命令模式來重構


interface dao

{

    crdu() ;

}


class ConcreteDao implements dao

{

    crdu(){...} ;

}


class Service

{

    private Dao dao ;


    public void set(Dao dao){}


    public void service(){dao.service();}

}


class ServiceControl

{

    private HashMap<Integer , Dao> map ;

    private Service service ;


    public ServiceControl()

    {

        //讀xml表初始化標識與dao的對應

    }


    public void service(int flag)

    {

        //根據flag來選擇不同的dao注入到service中

        Dao dao = map.get(flag) ;

        service.set(dao) ;

        service.service() ;

    }

}

然后control層直接嗲用servicecontrol就可以了, 這樣control層就和dao解耦了, 兩邊的修改互不影響, 通過xml進行協調


查看完整回答
反對 回復 2019-04-17
  • 7 回答
  • 0 關注
  • 816 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號