加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 00:05:04 所属栏目:百科 来源:网络整理
导读:我是C#开发人员,我想使用工厂模式来创建表示硬盘上的文件或目录的对象. FileInfo和DirectoryInfo是用于此目的的.NET中的类,但是我想拥有自己的包含它们的IFileInfo和IDirectoryInfo接口而不是它们.使用自定义接口而不是内置类的原因是因为我想添加一些其他属
我是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()构造函数抛出的实际异常?

只是想知道在这个具体情景案例中最佳做法是什么……

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读