Seb*_*ber 3 language-agnostic exception-handling exception
我想更好地了解什么是快速失败和故障安全.
乍一看,我认为快速失败意味着我们希望在出现意外情况时让系统明显失败.我的意思是例如,如果工厂不能创建对象的实例,对于故障快速原则,我们真的不希望工厂返回null,或者空对象,或者部分初始化的对象,偶然可以使用正确地通过应用程序 - >大多数时候我们会有意外的行为,或者在另一个级别上提出的意外异常,这些异常不会让我们知道真正的问题是在工厂.这个原则意味着什么?
失败安全原则对我来说很难理解.Java中最常见的例子是关于集合,它们的迭代器和并发访问.据说,允许在迭代时修改列表的集合/迭代器称为故障安全.它通常通过最终迭代初始列表的副本来完成.但是在这个例子中,我并不真正了解系统失败的地方......因此,虽然它是故障安全的......失败在哪里?我们只是根据我们的需要迭代一个副本或者不重复...我没有看到与故障安全的维基定义有任何匹配...
因此,在这样的文章中:http: //www.certpal.com/blogs/2009/09/iterators-fail-fast-vs-fail-safe/ 他们快速失败,快速失败...我只是穿抓住这就是为什么我们把这个迭代称为故障安全的副本...
我在这里找到了另一个例子:http: //tutorials.jenkov.com/java-exception-handling/fail-safe-exception-handling.html 这似乎与故障安全原则的初始定义有很多关系.我认为故障安全的是,当系统出现故障时,我们必须确保故障处理程序不会失败,或者如果确实如此,则确保故障处理程序的故障不会隐藏真正的初始问题.在给定的例子中,处理程序就在初始故障代码附近,但情况并非总是如此.故障安全对我来说意味着更像我们正确处理故障处理程序中可能发生的错误或类似的事情......
因此,对我来说,这两个原则似乎并不相容.你怎么看?系统不能快速安全地失败???
最好首先避免故障(故障安全),但如果不可能,最好快速失败(尽快失败).
这两者不是对立的,而是互补的.
正如你所说 - 我喜欢我的代码尽可能地保证安全,但是如果不安全,我希望它快速失败.
| 归档时间: |
|
| 查看次数: |
1590 次 |
| 最近记录: |