.NET中错误代码/消息管理的方法

时间:2010-03-06 07:07:55

标签: .net exception-handling error-handling n-tier-architecture

寻找有关在多层应用程序中管理错误代码和消息的建议/最佳做法。特别是:

  1. 应该在哪里定义错误代码?枚举?类?
  2. 错误消息或与错误代码相关的更多详细信息如何?资源文件?枚举值等属性?
  3. 如果你有一个由DAL,BLL,UI和Common项目组成的多层应用程序,那么是否应该为所有层提供一个巨大的代码列表,或者这些代码是否可以按项目/层进行扩展?
  4. 更新重要提一下,我不能仅仅依赖异常和自定义异常类型来进行错误报告,因为此应用程序的某些客户端将通过Web服务(SOAP&amp; REST)< / p>

    欢迎任何建议!

2 个答案:

答案 0 :(得分:6)

错误代码是旧的skool,在COM和C编程的旧时代,你需要它们,这些环境不支持异常。如今,您使用例外来通知客户端代码或用户有关问题的信息。 .NET中的异常是自描述的,它们具有类型,消息和诊断。

您需要区分两种类型的异常,即可合理恢复的异常,以及您不知道到底出错的原因或从中恢复的异常。后者是迄今为止最常见的,你需要一个人来采取纠正措施。使用标准的内置.NET异常类型之一来引发它们。 IllegalOperationException,FormatException,ArgumentException是常见的选择。如果它是引发这种异常的后端,那么你只想在不改变的情况下通过它。您通常需要一个finally块来确保内部状态是一致的,有时候一个catch块包含一个简单的throw to recover状态。

您认为可恢复的任何内容都应该使用您自己声明的异常类型引发,派生自Exception类。这使代码上游有机会编写一个catch子句并做一些有意义的事情。您需要生成描述问题的消息,如果上游代码实际上没有处理它,则需要从硬编码字符串或资源中检索消息文本支持本地化。

答案 1 :(得分:2)

我认为最好创建一个Common Project(或ApplicationFramework Project)并将 Exceptions Common Object 放在其上。

拥有一个包含基类的ApplicationFramework(特别是在UI - PageBase - MasterBase- ModuleBase等中)总是一个好主意

显而易见,您必须将您的课程和Enums放在 BLL 项目中。

请注意,3层并不意味着 3项目。您可以在BLL中拥有5个项目。

最后不要忘记使用 ELMAH 或任何其他类似工具。