【问题标题】:Storing exception messages in a global location在全局位置存储异常消息
【发布时间】:2011-01-04 01:26:28
【问题描述】:

我希望有一个存储异常消息的位置(这些不是面向用户的)。 我也有一些异常,它们可能有不同的错误消息和代码。这些代码仅用于文档和通信目的。但是,将所有错误消息集中在一个位置对于参考错误并为操作人员提供建议的修复非常有价值

我正在考虑这些:

  1. 所有异常消息的资源包
  2. 全局枚举,每个枚举都包含一条消息和代码
  3. 每个异常类中的枚举,每个都有异常可以具有的消息和代码。

哪个是最好的选择?

【问题讨论】:

    标签: java design-patterns exception maintainability


    【解决方案1】:

    resourcebundle 和 enum 不能解决问题的同一部分。您既需要文本外部化以进行本地化(即资源包或类似内容),也需要某种方式来识别消息类型。如果您的系统不可扩展(您可以控制所有异常类型),枚举是跟踪消息类型的一种不错的方式。如果其他人可以扩展您的系统,枚举将不会是一个好的类型,因为他们无法添加新代码。我建议对异常类型使用字符串,因为这很容易在必要时进行命名空间分区。

    【讨论】:

    • 我同意它们适用于不同的事物。我不需要本地化。我的系统不打算由其他外部方扩展。它不是图书馆或任何类似的东西。它是一个网络应用程序。我没听懂你的最后一句话。
    • 如果您不需要可扩展性,那么使用枚举作为类型是一种非常简单且类型安全的方法。最后一句与在可扩展性场景中避免异常类型冲突的问题有关。您的错误代码可能是类似于 java 包名称的字符串。
    • 啊。无论如何我都需要这样做,因为如果我使用单个文件(用于枚举),那么无论如何我都需要对错误进行分区。有什么建议么 ?为了可读性/可维护性,我需要以某种方式维护异常与错误的关联。任何想法如何?我添加了第三个选项,你能权衡一下吗?
    • 只需根据分组适当地命名您的枚举值。然后使用 enum.name() 作为保存错误消息的属性文件 (ResourceBundle) 的键。在大多数情况下,我建议不要增加异常类(您的选项 3)。仅当您打算专门捕获和处理一些异常时才有用。如果您的所有处理都是通用的,那么一个具有类型的异常类就是要走的路。
    • 通常,字符串被外部化到资源文件中,而不是在 java 源代码中硬编码,但如果您希望对消息进行硬编码,您可以在枚举中进行。
    【解决方案2】:

    我不能建议你做这些。如果您想让操作员有所阅读,请使用某种形式的 Javadoc 或 doclet 创建一个包含系统中所有异常消息的文档。你甚至可以使用Doxygen

    通过创建包含每个异常消息/代码的单个文件,您将所有代码捆绑在一起,通过该单个文件创建了一个整体程序。您的系统中肯定会有一些部分不需要包含 SQL 异常,或者用户界面异常不应访问 SQL 异常。

    【讨论】:

    • 我应该更清楚一点——我的“程序”是一个耳朵,错误消息只针对那些由我们的代码创建的。不是 sqlexceptions 之类的。我倾向于选项 2...,那么第三个选项呢?我可以在每个异常类中都有枚举,并带有错误消息的代码和模式字符串。也许那时我可以使用您的建议来生成系统范围的错误消息表。不知道该怎么做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多