簡體   English   中英

我應該處理工廠模式類中的異常還是讓它們向上傳播?

[英]Should I handle exceptions in factory pattern class or let them propagate upwards?

我是C#開發人員,我想使用工廠模式來創建表示硬盤上的文件或目錄的對象。 FileInfo和DirectoryInfo是用於此目的的.NET中的類,但是我想擁有自己的包含它們的IFileInfo和IDirectoryInfo接口而不是它們。 使用自定義接口而不是內置類的原因是因為我想添加一些其他屬性,如文件shell圖標等...

所以我想使用工廠模式為文件/目錄路徑的給定字符串創建IFileInfo和IDirectoryInfo的實例。

所以工廠類看起來像:

public class MyFileInfoFactory
{
    IFileInfo Create(string filePath)
    {
        System.IO.FileInfo file = new System.IO.FileInfo(filePath);

        // turn FileInfo to my IFileInfo etc...
    }
}

現在看一下System.IO.FileInfo文檔( FileInfo MSDN ),我看到有幾種可能的異常可以拋出。 我的問題是我應該在工廠Create()方法中處理所有這些異常嗎? 或者我應該讓它們向上傳播到調用MyFileInfoFactory.Create()的代碼?

如果第一個解決方案是可行的,那么下一步將是什么? 例如,我應該返回null還是可能拋出一些自定義異常,並將InnerException屬性設置為從新FileInfo()構造函數拋出的實際異常?

只是想知道在這個具體情景案例中最佳做法是什么......

一般情況下,您應該在兩種情況下處理異常:

  1. 您知道如何處理它並從錯誤中恢復。 沒有任何外部干預,並且您希望以對調用代碼透明的方式這樣做。
  2. 您希望將異常包裝在您自己的異常中。 如果您需要將其他信息傳遞給調用代碼,或者特定異常對調用代碼不是非常重要(盡管您應該始終將其作為異常構造函數中的innerException參數包含在內),這將innerException

因此,對於任何可能拋出的異常(並且不認為MSDN中的異常列表是詳盡的...很多東西都是樣板文件,不幸的是),如果你不知道如何從中恢復默默地並且不想將它包裝在你自己的異常中,然后不要處理它並讓它冒泡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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