<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java異常設(shè)計(jì)總結(jié)

     

    異常爭(zhēng)論

     

    異常有兩個(gè)模型:中止模型和繼續(xù)模型

    中止模型認(rèn)為異常不應(yīng)該再回來(lái),他做的是善后工作。而繼續(xù)模型保持異常時(shí)環(huán)境,希望再一次能運(yùn)行成功。

    Java采用的是前者(一般語(yǔ)言都是前者),而OS一般采用后者。

    Java異常有三類(lèi):錯(cuò)誤,運(yùn)行時(shí)異常,檢查型異常。

     

    官方的觀點(diǎn)是

    39 條:最好為異常條件使用異常。也就是說(shuō),最好不為控制流使用異常。

    40 條:為可恢復(fù)的條件使用檢查型異常,為編程錯(cuò)誤使用運(yùn)行時(shí)異常。

    41 條:避免不必要的使用檢查型異常。

    43 條:拋出與抽象相適應(yīng)的異常。(使處理異常更直觀)

    在異常的使用上,專(zhuān)家的觀點(diǎn)是很不一樣的

    C#作者Anders根本就忽略檢查型異常。

    Bruce Eckel,聲稱(chēng)在使用 Java 語(yǔ)言多年后,他已經(jīng)得出這樣的結(jié)論,認(rèn)為檢查型異常是一個(gè)錯(cuò)誤 —— 一個(gè)應(yīng)該被聲明為失敗的試驗(yàn)。

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

    缺點(diǎn)1,代碼中包含了過(guò)多的catch,使得代碼不清晰

    缺點(diǎn)2,有時(shí)候捕捉的異常沒(méi)有什么實(shí)際意義

    缺點(diǎn)3,不夠清晰的錯(cuò)誤指示。

    缺點(diǎn)4,過(guò)深的異常層次。

    缺點(diǎn)4,性能。

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

    Eckel 提倡將所有的異常都作為非檢查型的,并且提供將檢查型異常轉(zhuǎn)變?yōu)榉菣z查型異常的一個(gè)方法,同時(shí)保留當(dāng)異常從棧向上擴(kuò)散時(shí)捕獲特定類(lèi)型的異常的能力

     

    Rod Johnson 他采取一個(gè)不太激進(jìn)的方法。他列舉了異常的多個(gè)類(lèi)別,并且為每個(gè)類(lèi)別確定一個(gè)策略。一些異常本質(zhì)上是次要的返回代碼(它通常指示違反業(yè)務(wù)規(guī)則),而一些異常則是發(fā)生某種可怕錯(cuò)誤(例如數(shù)據(jù)庫(kù)連接失敗)的變種。Johnson 提倡對(duì)于第一種類(lèi)別的異常(可選的返回代碼)使用檢查型異常,而對(duì)于后者使用運(yùn)行時(shí)異常。在發(fā)生某種可怕錯(cuò)誤的類(lèi)別中,其動(dòng)機(jī)是簡(jiǎn)單地認(rèn)識(shí)到?jīng)]有調(diào)用者能夠有效地處理該異常,因此它也可能以各種方式沿著棧向上擴(kuò)散而對(duì)于中間代碼的影響保持最小(并且最小化異常淹沒(méi)的可能性)。

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

    解決1:謹(jǐn)慎的拋出檢查型異常。或者你認(rèn)為,你可以處理它。否則,包裝為運(yùn)行時(shí)異常。

    解決2:如果遵守12不是問(wèn)題

    解決3:異常不跨層,否則必須捕捉或者包裝。

             比如持久層丟出的SalException,你或者丟棄/處理/包裝(為運(yùn)行時(shí)異常),或者重新包裝為業(yè)務(wù)層異常。保持JEE層的獨(dú)立和異常的清晰性。

             包裝底層異常,保持異常鏈。

    解決4:如果符合14也不是問(wèn)題。再次強(qiáng)調(diào),能捕捉就捕捉。

    解決5:減少異常使用,減少層次。

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

     

    je里面,robin認(rèn)為異常是流程控制的一部分——當(dāng)然,考慮到性能問(wèn)題,這個(gè)流程不應(yīng)該是大概率流程——也就是異常流程

    例如用戶(hù)登錄

    Try{

    用戶(hù)登錄(用戶(hù)名,密碼);

    登錄成功;

    }catch(沒(méi)有這個(gè)用戶(hù)異常 e{

             錯(cuò)誤提示界面;

    }

    Potian則認(rèn)為,沒(méi)有用戶(hù)是正常業(yè)務(wù)邏輯的一部分

    If(!用戶(hù)業(yè)務(wù)層.沒(méi)有這個(gè)用戶(hù)(用戶(hù)名))錯(cuò)誤提示界面;

    If(用戶(hù)業(yè)務(wù)層.檢驗(yàn)密碼(用戶(hù)名,密碼))登錄成功;

    else 登錄失敗;

    Potian認(rèn)為不應(yīng)該在一個(gè)業(yè)務(wù)中包含了過(guò)多的責(zé)任。

     

    Ps:在servlet中,我喜歡僅僅簡(jiǎn)單的在action中調(diào)用最好一個(gè)業(yè)務(wù)層方法就可以完成此action的任務(wù)。這意味著我的servlet非常瘦,可以比較容易的被替換。如果采用了potian的辦法,則意味著我要把業(yè)務(wù)層中的代碼前移到servlet中來(lái),這模糊了業(yè)務(wù)層的責(zé)任。解決的辦法是回到老路子上來(lái)。

    Ps:我還認(rèn)為,沒(méi)有異常的業(yè)務(wù)方法表達(dá)能力太弱,異常給了他們更豐富的表達(dá)能力。這使得業(yè)務(wù)層可以更豐富的表達(dá)業(yè)務(wù)意義。避免將業(yè)務(wù)責(zé)任分散掉。

     

    我認(rèn)為在業(yè)務(wù)層中,恰恰要包含足夠的責(zé)任。不多也不要少(流程分支-2最好)。在別的層次中,要細(xì)致一點(diǎn)。

    posted on 2007-05-11 15:22 wanglin 閱讀(3655) 評(píng)論(1)  編輯  收藏

    評(píng)論

    # re: java異常設(shè)計(jì)總結(jié) 2007-06-30 22:16 wanglin

    關(guān)于異常的再次總結(jié)

    1,符合j2ee分層
    即異常不跨層,跨層必須封裝
    2,性能
    如果在同一個(gè)方法內(nèi)捕捉和處理掉異常,性能影響很小。但是如果要到堆棧里面,性能就影響比較大。
    所以能處理就處理,不能處理就封裝再throw。如果不適合再次封裝(封裝層次太多也不好)那么就直接throw吧,這種情況要慎重
    關(guān)于封裝的問(wèn)題,看異常的分類(lèi)
    從語(yǔ)法上分error和exception,前者不提,后者又分runtimeexceptioin和exception。后者是可以處理的異常.
    常常提uncheckexception和checkexception,前者是我們無(wú)法處理的,建議轉(zhuǎn)化成runtimeexception。后者我們處理。
    我們處理異常的時(shí)候,要注意異常信息的丟失,使用異常鏈。
    3,關(guān)于異常的new throw.....以及業(yè)務(wù)邏輯
    我是贊成用異常控制邏輯的。
    oo編程,僅僅靠返回值表達(dá)業(yè)務(wù)邏輯能力太有限了,如果返回字典符號(hào)也不自然。異常框架設(shè)計(jì)的好,性能的問(wèn)題是不大的。
      回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    <2007年5月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲成a人片毛片在线| 亚洲AV中文无码乱人伦下载| 亚洲人成网站18禁止久久影院| 久久国产精品免费视频| 亚洲色自偷自拍另类小说| 免费无码又爽又刺激高潮软件| 久久久久久久尹人综合网亚洲| 久久久久久国产精品免费免费男同| 亚洲精品中文字幕乱码三区| 免费在线看黄网站| 精品亚洲aⅴ在线观看| 久久久久久精品免费看SSS| 亚洲国产美女视频| 狼友av永久网站免费观看| 国产精品亚洲一区二区三区久久| 亚洲AV永久无码精品一区二区国产 | 一个人晚上在线观看的免费视频| 国产福利电影一区二区三区,亚洲国模精品一区 | baoyu777永久免费视频| 亚洲人成电影福利在线播放| 在线看片韩国免费人成视频| 亚洲日韩一区二区三区| 亚洲不卡AV影片在线播放| 天黑黑影院在线观看视频高清免费 | 不卡精品国产_亚洲人成在线 | 77777亚洲午夜久久多喷| 全部免费毛片免费播放| 最近更新免费中文字幕大全| 亚洲精品午夜在线观看| 日韩一区二区在线免费观看| 人妖系列免费网站观看| 亚洲avav天堂av在线不卡| 野花高清在线观看免费3中文| 国产亚洲日韩在线a不卡| 久久亚洲高清观看| 全免费A级毛片免费看网站| 久青草视频97国内免费影视| 亚洲国产精品综合久久久| 亚洲国产专区一区| 国产精品视频免费| 一级毛片a免费播放王色电影|