我应该处理工厂模式类中的异常还是让它们向上传播?

时间:2012-08-27 00:03:38

标签: c# .net design-patterns factory fileinfo

我是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 个答案:

答案 0 :(得分:12)

一般情况下,您应该在两种情况下处理异常:

  1. 您知道如何处理它并从错误中恢复。没有任何外部干预,并且您希望以对呼叫代码透明的方式这样做。
  2. 您希望将异常包装在您自己的异常中。如果您需要将其他信息传递给调用代码,或者特定异常对调用代码不是非常重要(尽管您应该始终将其作为innerException参数包含在异常的构造函数中),这将非常有用。 / LI>

    因此,对于任何可能抛出的异常(并且不要认为MSDN中的异常列表是详尽的...很多东西都是样板文件,不幸的是),如果你不知道如何从静默地恢复它并且不想将它包装在你自己的异常中,然后不要处理它并让它冒泡。