[英]Exception handling technique between class library and other projects
對於在方法層次結構中處理異常,我有些困惑。
假設,我在一個類庫項目中有一個類Logger
。 請看下面的代碼-
namespace MyLibrary
{
public class Logger
{
//exposed to other project
public static void CreateLog(String message)
{
try
{
WriteInFile(message); //calling the method below
}
catch (Exception Ex)
{
throw Ex;
}
}
//private method
private static void WriteInFile(String message)
{
try
{
//Writing in a file
}
catch (Exception Ex)
{
throw Ex;
}
}
}
}
假設,我在ASP.NET MVC項目中使用該庫。 代碼-
namespace MvcProject.Controllers
{
public class HomeController : Controller
{
public ActionResult DoSomething()
{
try
{
Logger.CreateLog("some text.");
}
catch (Exception Ex)
{
//Exception is handled here.
}
return View();
}
}
}
層次結構: DoSomething() -> CreateLog() -> WriteInFile()
這三種方法都有try.. catch..
塊。 我的問題是-
我是否真的需要try.. catch
CreateLog()
和WriteInFile()
方法?
如果我在所有方法中都使用它,是否會對性能產生影響?
這是一個虛構的例子來說明問題。
如果您發布帶有建議的修訂代碼塊的答案,對我來說將更有用。
謝謝。
我真的需要嘗試..抓住每種方法嗎?
不,事實上,它是通過切斷堆棧跟蹤傷害你的診斷-你將無法看到原來完整的堆棧跟蹤。 您可以使用以下方法解決此問題:
throw;
代替
throw Ex;
......但基本上try / catch塊只是添加冗余代碼在這里。 擺脫它們。
如果我在所有方法中都使用它,是否會對性能產生影響?
只有當一個異常被拋出 - 但是它可能使其速度慢一些重新計算堆棧跟蹤各一次。 我不會擔心性能雖然 - 首先擔心的代碼的可讀性(和堆棧跟蹤的效果)。
將代碼包裝在try,catch結構中時,對性能的影響很小。
當某個方法無法完成其設計目標時,應引發異常。 這是調用者代碼的“信號”,說明發生錯誤的地方。
它是由你來捕捉 拋出的異常。 為此,我們將要運行的代碼包裝在“ try”語句中,該語句為您設置了捕獲異常的代碼。
如果引發異常,則代碼將跳轉到catch塊。 你可以做的catch語句的變化,像“只能抓一只特定類型的異常”,或者捕獲所有異常。
你並不需要try / catch語句的所有功能中。 相反,我們通常從圖書館拋出異常,並讓應用程序員設置在try / catch結構。 這樣,決定如何處理錯誤的是業務邏輯的程序員,而不是庫的程序員。
你可能有時候想幫助應用程序開發人員,通過處理一些錯誤,無論如何,這可能是這樣的東西:你的資料庫捕獲與文件系統繁忙異常,我們恐慌之前,我們捕捉到了異常,並進一步引發異常了之前重試幾次,流...
這一切都取決於它是什么類型的異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.