c# - 异常处理中的设计模式

标签 c# design-patterns

我实际上正在编写一个可供多个类使用的库类。我只是简单地举个例子来说明一点。假设我有三个类(class):A、B 和 C:

public class B
{
  public static string B_Method()
  {
    string bstr = String.Empty;

    try
       {


        //Do Something

       }

    catch
        {

        //Do Something

        }

  return bstr;

}

B 是我正在编写的库类。现在让我们说另外两个类 A 和 C:

public class A
{
  public void A_Method()
  {
   string astr = B.B_Method();
  }

}

public class C
{
 public void C_Method()
  {
   string cstr = B.B_Method();
  }

}

问题是关于异常处理的。我希望 A 和 B 两个类各自的方法以各自不同的方式处理 B_Method 中发生的异常。

我在寻找框架设计模式,但觉得没什么用。

最佳答案

我通常遵循的方法是这样的:

  • 如果我的方法可以做一些有用的事情除了异常(exception),我会捕获它并去做。
  • 如果没有,我不会捕获它,而是将其留给调用代码来处理。

我唯一会放置“捕获所有” block 的地方是 UI 代码的入口点(例如按钮单击的事件处理程序等),因为不捕获异常可能会导致进程中断。

这也意味着异常子句应该捕获您可以处理的特定异常。

我有时看到的一种方法是捕获异常,将其包装在新的异常类型中并抛出。虽然这为您提供了一些可追溯性,但我也觉得它在调用代码的异常处理中删除了一些选项,例如针对不同场景使用特定的 catch 子句。在这些情况下,您将需要使用 if 子句来检查内部异常,在我看来可读性较差。

关于c# - 异常处理中的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13877647/

相关文章:

c# - 将 .NET 外部 dll 合并到单个可执行文件

c# - 将对象数组作为 TempData[] 传递给查看

JavaScript 增强模块 : Why assign IIFE to module when passing module in as argument?

javascript - ES6 - 如何获取特定上下文的数组项(函数)

php - 依赖注入(inject)容器与注册表模式

c# - SSH 使用 C# 建立 MySQL 连接隧道

c# - 动态数据表在asp.net中取反序

c# - 计算时间执行作为单独的类,其中函数是可变的

Javascript 沙盒模式示例实现

java - 使用公共(public)构造函数在java中创建一个单例类