首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在开发模块化应用程序时使用快速失败方法

在开发模块化应用程序时使用快速失败方法
EN

Stack Overflow用户
提问于 2012-04-24 11:28:00
回答 3查看 1.2K关注 0票数 1

在开发模块化应用程序时,我们显然需要使用抗故障系统吗?

当创建模块时,如果存在模块无法处理的错误条件,它应该报告错误(比如抛出异常.),而不必担心谁来处理它。看起来,这可以作为开发模块的指导方针。这有什么问题吗?

编辑:示例

In module.dll

代码语言:javascript
复制
public class SomeClass:ISomeInterface
{

    public void CreateFile(string filename)
    {
       //The module have no idea who calls this. But there is something wrong        
       //somewhere so  throw an exception early. The module writer has no control over 
       //how the exception is handled. So if this exception is not handled by the 
       //Client Application the application can potentially crash.Do he need to worry 
       //about that?
       if(filename == null)
       {
          throw new ArgumentNullException("Filename is null");
       }

       //I think the following is bad. This code is making sure that a module 
       //exception wont crash the application.Is it good?
       //if(filename ==null)
       //{
       //Logger.log("filename is null");
       //return;
       //}
    }
 }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-24 16:49:44

我可以看到有两类关键的例外情况:一种是整个系统可能已经被破坏了,另一种是没有什么可以安全地假定是不安全的,而在这些情况下,系统的一个重要方面--代码将“正常工作”--不会被破坏,但我们没有理由相信系统的其他部分受到了破坏。在前一种情况下,程序除了死没有太多的功能,可能会尝试记录发生的事情,如果它能够这样做而不破坏任何“主线”数据的话。然而,在后一种情况下,扼杀应用程序是“不恰当的”。更好的方法是设计子系统,以便代码能够“拔下插头”,防止它造成数据损坏,其结果是,任何进一步使用它的尝试(除了返回值应该表明问题所在的“您仍在工作”查询之外)可能会抛出一个立即异常,但允许程序中那些不需要问题子系统继续运行的部分继续运行,除非或直到他们决定没有问题才能使用它。

票数 2
EN

Stack Overflow用户

发布于 2012-04-24 12:02:11

一个故障快速模块将处理错误的责任(但不是检测错误)传递给下一个更高的系统设计级别的

维基百科的定义。什么是“更高的系统设计水平”。这不应该至少是一个报告故障的水平,这样才能采取纠正措施并解决问题吗?或者在使用类的客户端代码提供的上层实现。或者是通过AppDomain.UnhandledException调用的通用错误报告。都完全超出你的控制范围。

抛出一个异常。

票数 1
EN

Stack Overflow用户

发布于 2012-04-24 11:49:57

通常,在C++中,当我通常实现一个关键错误方案时,我甚至不允许这样的严重异常离开异常处理程序--我将全局访问类实例的'criticalExit()‘方法称为’criticalExit()‘方法(我通常有一个这样的方法来存储“全局”方法等等)。记录器、对象池),除了异常和字符串( string通常只是模块和函数名)。criticalExit()锁定互斥锁,将其优先级提高到‘ExitProcess_优先级_TIME_ exception’,打开'CriticalError.Log',将异常消息和字符串追加到文件中,关闭它并调用ExitProcess(1),(Environment.Exit(1))。

..and,我只是想看看,我在C#上试过这样做。生成一个可全局访问的单个实例并不容易:(

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10296961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档