繁体   English   中英

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

[英]Handling errors - should I use exceptions or events in an “event driven” application?

我正在开发一个像脚本一样工作的小型应用程序。 我会给它一些网址,它将从中提取一些有用的信息。 在下载文件并解析信息时,它还会引发事件,以便有一个侦听器,它将能够读取所需的所有内容。

系统基本如下:

class UrlInfoExtractor {
    ...

    public void Run() {
        ...
    }

    ...
}

与往常一样,存在错误的风险(即,目前没有互联网)。 起初,我认为让Run()方法抛出我自己的一些异常( BadLoginExceptionBadUrlException等)是一个好主意。 但是,由于已经定义了很多事件,所以我开始认为将错误作为事件弹出可能会更好(我假设无论遇到什么错误,我都会停止该过程)。 系统的整个方法将更加一致。 另一方面,如果开发人员不关心侦听错误事件,则会使错误不被注意。

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

如果确实是一个错误,我会提出一个例外。 使用事件的不利之处在于,如果调用者未为异常事件添加处理程序,则不会通知他们有错误,并且可以假定一切正常。

如果您反对引发异常,则始终可以返回一个状态,而不是将函数设为空。 这样可以避免在控制流中使用异常,但仍可以将有关呼叫状态的信息返回给呼叫者。

如果您仍然要停止脚本或应用程序,建议将异常冒泡。 您可以在需要清理或保存状态的任何地方捕获并重新抛出它。 “隐藏”事件背后的所有异常很少是一个好主意。

如果经常遇到异常,则约翰建议返回值而不是void,这将使您在保持脚本运行的情况下实现更简洁的实现。

附带说明一下,一致性不一定等同于“良好”。 尽可能使用语言功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM