1

更新:这里的错误代码不是函数的返回值。实际上,我不是在讨论使用异常或错误代码进行错误处理。我试图弄清楚,使用什么模式来组织错误。我真正在做的就是在 Windows 蓝屏上显示错误代码。回到过去,当您的 Windows 崩溃时,您会在蓝屏上看到一个错误代码,使用该代码您可以通过查找 MS 的文档来了解发生了什么。在我的系统中,有许多插件由不同的人贡献,他们可能彼此不认识。如果我允许他们定义他们的错误代码。这主要是两个插件的错误代码可能会发生冲突

==================================================== ===============================================

我想设计一个可扩展的错误代码系统,允许插件定义自己的错误代码。基本思想是:

  1. 系统有一系列保留的错误代码
  2. 插件可以选择系统未使用的范围,然后在该范围内创建其错误代码。但是,问题是插件彼此不认识(因为插件可能由不同的人编写并根据用户的喜好安装到系统中)。所以他们的错误代码范围可能会发生冲突。

这个要求有什么好的做法吗?我用谷歌搜索了很多,但令我惊讶的是,很少有文章谈论在生产软件中设计错误代码。大多数帖子都关注异常与错误代码。

而且,有没有什么好的模式可以显示产品中的错误,用户可以弄清楚发生了什么?我的基本想法是向用户显示包含错误代码、描述和详细信息的错误。用户可以点击错误代码然后我会告诉他正确的解决方案

4

2 回答 2

0

对于您的应用程序抛出的每个异常,您将其插入数据库,您的错误代码是该记录的 id,这就是用户看到的。显然,相同的异常得到相同的 id。您需要的插件信息存储在数据库中

于 2013-04-25T20:59:53.993 回答
0

不知道你正在构建的插件系统是做什么的......

向宿主应用程序提供这些信息不应该是插件的责任吗?为什么不让对插件执行操作的结果包含这些项目呢?这样,您的主机应用程序就不会关心插件特定的实现细节,只关心某些事情是否正常......

const int OP_SUCCESS = 0;

// structure returned for plugin ops
struct OperationResponse {
    int code; // any other value than OP_SUCCESS is plugin-defined
    string message; // operation optional message, even if success
    // other fields
};

所以每次调用插件都会:

OperationResponse r = plugin.DoOperation();

if (r.code != OP_SUCCESS) {
    // do something with r.message and other fields
}
于 2013-04-25T19:01:40.953 回答