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

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

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

> execution assertion
我們預(yù)計(jì)會(huì)出現(xiàn)錯(cuò)誤。 在調(diào)用數(shù)據(jù)庫(kù)的Save()方法后添加anif,我們可以有效地?cái)嘌园l(fā)生的事情并采取相應(yīng)的措施。 沒(méi)什么好奇怪的
Nicklas Millard在丹麥的四大咨詢(xún)公司之一中擔(dān)任高級(jí)技術(shù)顧問(wèn)。 他主要擔(dān)任客戶(hù)項(xiàng)目的首席開(kāi)發(fā)人員和解決方案架構(gòu)師。
他一直在為商業(yè)客戶(hù)和政府機(jī)構(gòu)開(kāi)發(fā)軟件,例如國(guó)防部,教育部,丹麥環(huán)境與食品部,國(guó)家警察,丹麥勞動(dòng)力市場(chǎng)和招聘局以及Ø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)