防禦式程式設計
防禦式程式設計的主要思想是:子程式應該不因傳入錯誤資料而被破壞,哪怕是由其他子程式產生的錯誤資料。更一般地說,其核心思想是要承認程式都會有問題,都需要修改,聰明的程式設計師應該根據這一點來程式設計序。
我們心裡應該自始至終考慮各種各樣的錯誤處理機制:在區域性處理錯誤、使用錯誤碼來傳遞錯誤、在日誌檔案中記錄除錯資訊、關閉系統或其他一些方式等。僅僅因為程式語言提供了異常處理機制而使用異常,是典型的「為用而用」;這也是典型的「在一種語言上程式設計」而非「深入一種語言去程式設計」的例子。
過度的防禦式程式設計也會引起問題。如果你在每乙個能想到的地方用每一種能想到的方法檢查從引數輸入的資料,那麼你的程式將會變得臃腫而緩慢。更糟糕的是,防禦式程式設計引入的額外**增加了軟體的複雜度。防禦式程式設計引入的**也並非沒有缺陷,和其他**一樣,你同樣輕而易舉地在防禦式程式設計新增的**中找到錯誤
------
尤其是當你隨手編寫這些**時更是如此。因此,要考慮好什麼地方你需要進行防禦,然後因地制宜地調整你進行防禦式程式設計的優先順序。
術語:健壯性與正確性(
robustness vs. correctness
)正確性意味著永不返回不準確的結果,哪怕不返回結果也比返回不準確的結果好。
健壯性意味著要不斷嘗試採取措施,以保證軟體可以持續地運轉下去,哪怕有時做出一些不夠準確的結果。
舉例:人身安全攸關的軟體往往更傾向於正確性而非健壯性。不返回結果也比返回錯誤的結果要好。放射線**儀就是體現這一原則的好例子。
消費類應用軟體往往更注重健壯性而非正確性。通常只要返回一些結果就比軟體停止執行要強。
防禦式程式設計
場景 交易終端支援市中核算,必須需要處理當日的委託和成交資料,現系統的委託和成交在本地快取和遠端快取中各有乙份。思路 核算優先使用本地快取,本地快取不存在那麼就 防禦式 取遠端快取。實現package demo.design.defensive 專案 demo design defensive 場景...
防禦式程式設計
檢查所有 於外部的資料的值,檢查輸入值的合法性,與我們在註冊資訊是的正規表示式類似。斷言一般用於開發和維護階段,斷言為真,程式正常執行,斷言為假,程式出錯。斷言只在開發階段被編譯到目標 中,在生產產品中不編譯進去。使用斷言的指導意見 斷言是用來檢查永遠不該發生的情況,比如我們對於年齡的檢查,年齡不能...
防禦式程式設計(二)
防禦式程式設計是提高軟體質量技術的有益輔助手段。防禦式程式設計的主要思想是 子程式應該不因傳入錯誤資料而被破壞,哪怕是由其他子程式產生的錯誤資料。這種思想是將可能出現的錯誤造成的影響控制在有限的範圍內。1.在非法輸入 invalid inputs 中保護你的程式 乙個好程式,在非法輸入的情況下,要麼...