2010-09-01 28 views

回答

6

是的。

代碼合同是爲了保持一個嚴格的編程接口,只有開發人員才能正確或錯誤;一個用戶不應該真的能夠搞砸了。

驗證是爲了驗證數據;例如驗證數據不爲空,或匹配正則表達式。

+1

是的,合同失敗意味着你在代碼中有一個嚴重的錯誤,不應該被忽略/解決(這是默認情況下它不會引發可捕獲異常的原因的一部分)。 – porges 2010-09-01 21:02:17

2

代碼合同違反時會拋出異常。無效的用戶輸入不是一個例外情況,所以驗證函數通常不應該拋出異常。這就是爲什麼像TryParse這樣的方法被添加到框架中的原因(原始框架沒有它們,並且由於所有可能的例外而導致驗證繁瑣)。

0

代碼契約被用來斷言永遠是真實的東西,如果它們不是真的,那麼代碼中就有一個錯誤。這意味着它只能應用於由代碼控制的條件。所以,你不能用它們來陳述「用戶永遠不會提供一個空字符串」,因爲這不在代碼的控制之中。靜態驗證者將永遠無法證明這一陳述 - 它如何知道用戶會做什麼?

你能做的就是做出像「給定用戶輸入,該方法將返回一個非空字符串或拋出異常」的語句。