design-patterns - 建议设计模式/方法公开/容忍/从系统错误中恢复,异常处理(Java,C++,Perl,PHP)

标签 design-patterns exception-handling error-handling

您能推荐一种设计模式/方法来暴露/容忍/从系统错误中恢复,异常处理(Java,C++,Perl,PHP)吗?

一些错误需要报告。

某些错误可以在内部处理(通过重试或无关紧要(可以忽略))。

您如何构造代码以捕获它们?

但是所有错误都需要记录。

有哪些最佳实践?

为了模拟它们能够完全测试受它们影响的组件?

适用于几种现代编程语言的一般非编程语言特定问题,但将欢迎使用Java,C++,PHP和Perl进行模式,方法和哲学的示例说明。

最佳答案

我的哲学是总是尝试在发生错误的地方捕获错误。诸如全局异常处理程序之类的事情使调试过程变得困难。尽可能将错误处理保留在故障站点的本地。调试更容易,并且避免了非特定的错误报告,该报告往往会使用户感到困惑和沮丧。

就日志记录而言,这是一个实现决策。每当检测到错误情况时,我通常都会调用一些报表实用程序函数。显然,您可以更改日志记录级别,以便报告某些严重错误。同样,如果您的应用程序应退出并出现错误,请尽快执行此操作。

模拟和测试有些正交。为了完全测试您的错误处理代码,您应该能够编写导致每个错误发生的测试用例。它可能涉及设计输入或更改状态。如果错误不取决于输入或与外部系统的交互,那么您应该真正考虑这是故障情况,还是偶然触发的实现错误。

关于design-patterns - 建议设计模式/方法公开/容忍/从系统错误中恢复,异常处理(Java,C++,Perl,PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7432596/

相关文章:

java - 聚合:死后是否有生命?

c++ - 使用模板实现多态

c++ - OpenCV 错误 : "LINK : fatal error LNK1104: cannot open file ' opencv_core231d. 库'”

php - 使用 register_shutdown_function() 处理 PHP 中的 fatal error

node.js - 为什么要使用 Node.js EventEmitter 而不是简单的函数?

algorithm - Strategy设计模式如何实现?

c# - WCF Web 服务错误 : "Service endpoint binding not using HTTP protocol"?

java - Iterator 实现应该如何处理已检查的异常?

c++ - 从 boost::filesystem::is_directory 捕获异常

C# 如何在使用 getLastError 方法的全局错误处理程序中访问 DbEntityValidationException?