保護(hù)程序免遭非法輸入數(shù)據(jù)的破壞
檢查所有來(lái)源于外部的數(shù)據(jù)的值
檢查子程序所有輸入?yún)?shù)的值
決定如何處理錯(cuò)誤的輸入數(shù)據(jù)
斷言
用錯(cuò)誤處理代碼來(lái)處理預(yù)期會(huì)發(fā)生的狀況会宪,用斷言來(lái)處理絕對(duì)不應(yīng)該發(fā)生的狀況
避免把需要執(zhí)行的代碼放到斷言中
用斷言來(lái)注解并驗(yàn)證前條件和后條件
對(duì)于高健壯性的代碼秀又,應(yīng)該先使用斷言再處理錯(cuò)誤
異常
用異常通知程序的其他部分,發(fā)生了不可忽略的錯(cuò)誤
只在真正例外的情況下才拋出異常
不能用異常來(lái)推卸責(zé)任
避免在構(gòu)造函數(shù)和析構(gòu)函數(shù)中拋出異常,除非你在同一個(gè)地方把他們捕獲
在適當(dāng)?shù)某橄髮游鰭伋霎惓?/p>
隔離程序,使之包容由錯(cuò)誤造成的傷害
隔欄與斷言的關(guān)系
隔欄的使用使得斷言和錯(cuò)誤處理有了清晰的區(qū)分。隔欄外部的程序應(yīng)使用錯(cuò)誤處理技術(shù)轧苫,在那里對(duì)數(shù)據(jù)的任何嘉定都是不安全的,而隔欄內(nèi)部的程序就應(yīng)該應(yīng)該使用斷言技術(shù)疫蔓,因?yàn)閭鬟M(jìn)來(lái)的數(shù)據(jù)應(yīng)該已經(jīng)在通過(guò)隔欄時(shí)被清理過(guò)了浸剩,如果隔欄內(nèi)部的某個(gè)子程序檢測(cè)到了錯(cuò)誤的數(shù)據(jù)钾军,那么這應(yīng)該是程序里的錯(cuò)誤而不是數(shù)據(jù)里的錯(cuò)誤。
隔欄的使用還展示了”在架構(gòu)層次上規(guī)定應(yīng)該如何處理錯(cuò)誤“的價(jià)值绢要。規(guī)定隔欄內(nèi)外的代碼是一個(gè)架構(gòu)層次上的決策吏恭。
盡早引入輔助調(diào)試的代碼
采用進(jìn)攻式編程
應(yīng)該以一種這樣子的方式來(lái)處理異常:在開(kāi)發(fā)階段讓它顯現(xiàn)出來(lái),而在產(chǎn)品代碼運(yùn)行時(shí)讓它能夠自我恢復(fù)重罪。
計(jì)劃移除調(diào)試輔助性的代碼
確定在產(chǎn)品代碼中保留多少防御式代碼
對(duì)防御式編程采取防御的姿態(tài)
把握合適的度