gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:23:25 26 4
gpt4 key购买 nike

我是 C# 开发人员,我想使用工厂模式来创建代表硬盘上文件或目录的对象。 FileInfo 和 DirectoryInfo 是 .NET 中用于此目的的类,但我希望拥有自己的 IFileInfo 和 IDirectoryInfo 接口(interface)来包装它们,而不是它们。使用自定义接口(interface)而不是内置类的原因是因为我想添加一些额外的属性,例如文件外壳图标等......

所以我想使用工厂模式为文件/目录路径的给定字符串创建 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 属性设置为从 new FileInfo() 构造函数抛出的实际异常的自定义异常?

只是想知道在这个具体场景案例中的最佳实践是什么......

最佳答案

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

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

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

关于c# - 我应该在工厂模式类中处理异常还是让它们向上传播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12134912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com