簡體   English   中英

類庫與其他項目之間的異常處理技術

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM