【问题标题】:How to create exception helpers?如何创建异常助手?
【发布时间】:2010-11-01 13:25:26
【问题描述】:

我正在考虑创建一个辅助方法来设置异常消息、自动设置 String.Format、添加内部异常、设置命令行退出代码等;类似:

public static void MyExceptionHelper(ExitCode code, string message) {}
public static void MyExceptionHelper(ExitCode code, Exception e) {}
public static void MyExceptionHelper(ExitCode code, Exception e, String message) {}
public static void MyExceptionHelper(ExitCode code, Exception e, String message, params object[] args) {}
// etc...

BCL 周围有一些静态类可以做这类事情(例如 mscorlib 中的 System.ThrowHelper)。
把这些放在哪里最好?作为异常的重载构造函数,在单独的静态类(如 BCL)中,作为异常本身的静态方法,还是在其他地方?

【问题讨论】:

    标签: c# .net exception


    【解决方案1】:

    我推荐 EnterpriseLibrary 中的 Exception 应用程序块,它具有非常优雅的处理异常的设计,如果您不想要所有 EntLib,我建议您复制它们的界面。

    【讨论】:

      【解决方案2】:

      对于这样的方法,我更喜欢重载的构造函数。您显然是在使用它来创建一个新对象,这就是构造函数的用途。

      一旦您进入静态方法的世界,并不总是很清楚它们应该在哪里结束。您需要分析谁将使用它们以及如何使用它们,然后检查每个潜在位置的优缺点。然后,您将知道将它们放在哪里。

      【讨论】:

        【解决方案3】:

        我只是为您的异常类创建这些构造函数。

        【讨论】:

          【解决方案4】:

          大多数时候,BCL 中的异常帮助程序是为了支持本地化(通常包含在几乎所有 .NET BCL 程序集中的 SR 内部类中。)一般的想法是您使用一个辅助方法,用于为异常传递一些基本数据,辅助方法为您处理资源检索和数据格式化以创建异常。好处是您可以集中处理可能从多个位置抛出但需要以相同方式创建的异常的代码。所以一般来说,与任何其他实用程序类或继承对象的想法相同......促进重用和可维护性。

          至于将它们放在哪里...我喜欢在我的每个程序集中都有一个“内部区域”,其中包含异常帮助器、资源帮助器和其他内部“程序集支持”类型。

          【讨论】:

            【解决方案5】:

            这看起来你有足够的自定义行为想要派生你自己的异常类,并把这个行为放在它上面。根据您以后是否要与基 Exception sine qua Exception 交互,您可能希望这些是派生类上的构造函数,将基设置为传入的异常,并从在你的班级内;多态性将允许将该实例重铸为基础异常,以便从那里进行交互。

            【讨论】:

              猜你喜欢
              • 2011-07-28
              • 1970-01-01
              • 1970-01-01
              • 2020-11-02
              • 2010-11-06
              • 1970-01-01
              • 2011-09-13
              • 2021-11-01
              • 2020-10-11
              相关资源
              最近更新 更多