實用程序設計建議,簡單但功能強大的技術,用于安全,可維護的軟件
我會簡短而甜美的
我們將介紹兩種非常簡單實用的防御技術,您可以立即將其應用于您的項目。
作為專業(yè)的開發(fā)人員,您很可能已經(jīng)在應用這些技術,因此您可能想把這一技術排除在外。
但是,對于尚未達到專業(yè)水平的任何人,這些技術都會提高您的質(zhì)量并使您的代碼更安全。
如果您以前從未聽說過防御性編碼,那么該差不多了。 這是要點。
防御性編碼使我們的軟件即使輸入錯誤也能以正確的方式運行。
好的,讓我們研究一下即使您輸入了錯誤的軟件,也可以如何使其表現(xiàn)良好。
警衛(wèi)條款-檢查前提條件
這些單線是防御性編碼的絕對基石之一。 它們位于方法的頂部,以確保僅在提供有效輸入時方法才繼續(xù)執(zhí)行。
它們是前提條件檢查。 這是一個非常簡單的示例,但仍然是一個真實的示例。

> simple guard statement
我們只是在檢查呼叫者是否向我們提供了非空值或空值。 如果繼續(xù)使用這些值可能會導致意外的結(jié)果,通常我們會這樣做。
當您的方法開始使用大量參數(shù)或一個參數(shù)需要多個保護子句時,您需要重構(gòu)為另一種保護子句方法。 這種重構(gòu)可能涉及創(chuàng)建一個包含所有所需屬性的對象以及IsValid()方法。 在這里,IsValid()方法正在檢查其狀態(tài),以驗證每個屬性是否都具有有效值。

> refactored guard statement
當您發(fā)現(xiàn)自己在多個方法中重復相同的保護子句時,此重構(gòu)技術特別有用。 例如,規(guī)范對象使您可以在一處捕獲業(yè)務規(guī)則。
方法內(nèi)的斷言
您對斷言非常熟悉。 這些語句在單元測試結(jié)束時。 在防御性編碼中,它們不僅限于測試。
您可能會調(diào)用其他類方法,甚至調(diào)用外部庫提供的方法。 在這種情況下,我們想在繼續(xù)執(zhí)行方法之前檢查一下關于這些方法執(zhí)行或返回的假設是否正確。

> execution assertion
我們預計會出現(xiàn)錯誤。 在調(diào)用數(shù)據(jù)庫的Save()方法后添加anif,我們可以有效地斷言發(fā)生的事情并采取相應的措施。 沒什么好奇怪的
Nicklas Millard在丹麥的四大咨詢公司之一中擔任高級技術顧問。 他主要擔任客戶項目的首席開發(fā)人員和解決方案架構(gòu)師。
他一直在為商業(yè)客戶和政府機構(gòu)開發(fā)軟件,例如國防部,教育部,丹麥環(huán)境與食品部,國家警察,丹麥勞動力市場和招聘局以及Ørsted。
在LinkedIn上連接
(本文翻譯自Nicklas Millard的文章《2 Defensive Coding Techniques You Should Use Today》,參考:https://medium.com/swlh/2-defensive-coding-techniques-you-should-use-today-4225cacc1c29)