[英]What is the least disruptive way to remove over-zealous try..catch blocks?
我繼承的代碼庫充滿了錯誤隱藏的反模式 :
public void foo() {
try {
//Entire body of method, sometimes only 5 lines but often 500+
} catch (Exception e) {
Logger.LogToFile(e.msg);
}
}
該模式的實例數量為數百個。
我的方法是完全刪除try..catch塊,因為我們已經在頂層有一個異常處理程序。 這是不受歡迎的,因為我覺得我正在改變行為。 (更多例外會冒泡)。
理想情況下,我會遍歷10-500行的100個實例中的每一個,並找出可能拋出的異常。 然后我只會在更嚴格的塊中壓縮這些異常:
public void foo() {
//...
try {
// ~1-5 lines
} catch (ArgumentInvalidException e) {
Logger.LogToFile(e.ToString());
//TODO handle
}
//...
try {
// ~1-5 lines
} catch (UnitConversionException e) {
Logger.LogToFile(e.ToString());
//TODO handle
}
//...
}
這是一項令人生畏的努力。
誰能想到一個聰明的方法來解決這個問題?
相關 - 刪除過多的try-catch塊
在這種情況下,可能“提取方法” http://refactoring.com/catalog/extractMethod.html會有所幫助。 當我編寫代碼時,我嘗試區分錯誤和異常。 錯誤!=常見情況下的例外情況。 例外情況過於昂貴,並且只有在特殊情況下才會發生。
我會解釋:
try
{
int.Parse("..")
}
catch()
{
// parsing Exception
}
VS
if(int.TryParse("..", out value)
{
// parsing Error
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.