处理错误 - 我应该在“事件驱动”应用程序中使用异常事件吗?

问题描述:

我正在开发一个像脚本一样工作的小应用程序。我会给它一些网址,它会从它们中提取一些有用的信息。由于它正在下载文件并解析信息,因此它还会引发事件,以便有一位听众,它将能够读取所需的一切。处理错误 - 我应该在“事件驱动”应用程序中使用异常事件吗?

系统基本如下:

class UrlInfoExtractor { 
    ... 

    public void Run() { 
     ... 
    } 

    ... 
} 

像往常一样,有错误(即,有目前没有互联网)的风险。起初我认为用Run()方法抛出我自己的一些例外(BadLoginException,BadUrlException等)是个好主意。但是,因为已经有很多定义的事件,所以我开始思考也许最好将错误作为事件弹出来(我假设无论发生什么错误,我都会停止该过程)。整个系统的方法会更一致。另一方面,如果开发人员不在意倾听错误事件,它将允许忽略错误。

在这种情况下,我是否更好地使用异常事件或引发事件?

如果确实是一个错误,我会引发异常。使用事件的缺点是,如果调用者没有为异常事件添加处理程序,他们将不会收到有关错误的通知,并可能认为一切正常。

如果你是反对提高例外,你总是可以返回你的函数是一个空状态来代替。这可能允许您避免使用控制流的异常,但您仍然可以向呼叫者返回关于呼叫状态的信息。

如果你要停止你的脚本或应用程序,无论如何,我会建议冒泡例外了。你可以捕捉并重新扔它,无论你需要清理或保存状态。 “隐藏”所有你在事件背后的异常很少是一个好主意。

如果你经常期待例外,约翰对,如果你想把你的脚本运行的返回值,而不是无效将使在实施清洁建议。

一点题外话,一致并不一定等同于“好”。尽可能使用语言功能来达到他们的目的。