2011-05-01 50 views
2

我上週訪問了荷蘭的devday11並瞭解了代碼合同。我正在考慮實施代碼合同,但以下內容對我來說仍不清楚。我應該如何處理運行時代碼合同違規?如何在運行時處理代碼合同違規

例如我的應用程序中有一個圖層調用另一個空值的圖層。被調用的函數有一個必需的聯繫人,所以它會拋出合同驗證錯誤。這應如何處理?所以像這樣的東西

public string GetOrderSomething(OrderModel order) 
{ 
Contract.Requires(order != null); 
// jibidi jibeda do something 
} 

//other application layer 
private void something() 
{ 
Class.GetOrderSomething(null); 
} 

應該做什麼?我是否應該用正常的嘗試抓住它,我是否應該處理它?我應該做些什麼「特殊」?

回答

1

假設你已經到位的「例外處理」的政策來處理,你不應該做任何特殊。

如果將是最好選擇一個特定的例外:

public string GetOrderSomething(OrderModel order) 
{ 
    Contract.Requires<ArgumentNullException> (order != null, "order"); 
    // jibidi jibeda do something 
} 

現在你可以象無(前)使用合同處理ArgumentNullException以同樣的方式和地點(一個或多個)。 PS:希望你喜歡這個話題。

3

對於這種情況,你應該做的,你通常會如果有做什麼

如果(爲了== NULL){ 拋出新的ArgumentNullException(); }

這CodeContract並不意味着類已經被動搖只是你傳遞一個錯誤的參數的方法...

然而,如果這將是一個對某些內部成員需要你知道它永不是空的,這是另一回事。你會有一個永久不可行的課程,如果你無法通過捕捉來修復它,那麼可能會引發一些致命的異常並提醒。

1

在我看來Codecontracts應該用來在運行時發現編程錯誤。

因此codecontract違章-execptions應如Avery其他編程錯誤的異常(即IndexOutOfBoundException)