异常处理中的设计模式

fut*_*110 3 c# design-patterns

我实际上正在编写一个可供多个类使用的库类.我简化了这个例子,以便说明一点.假设我有三个类:A,B和C:

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

    try
       {


        //Do Something

       }

    catch
        {

        //Do Something

        }

  return bstr;

}
Run Code Online (Sandbox Code Playgroud)

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();
  }

}
Run Code Online (Sandbox Code Playgroud)

问题是关于异常处理.我希望两个类A和B的相应方法以它们自己的不同方式处理B_Method中发生的异常.

我寻找框架设计模式,但觉得没用.

Fre*_*örk 9

我通常遵循的方法是:

  • 如果我的方法可以做一些有用的异常,我抓住它并做到这一点.
  • 如果没有,我不会抓住它并将其留给调用代码来处理它.

我将放置"全部捕获"块的唯一地方是UI代码中的入口点(例如按钮点击的事件处理程序等),因为没有捕获异常可能会使该过程失效.

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

我有时看到的一种方法是捕获异常,将其包装在一个新的异常类型中并抛出它.虽然这为您提供了一些可跟踪性,但我也觉得它在调用代码时删除了异常处理中的一些选项,例如为不同的场景设置了特定的catch子句.在这些情况下,您需要让if-clauses检查内部异常,而在我眼中则不太可读.