处理“异常”,很有可能成为“错误”

在我目前正在研究的项目中,我有一些问题区分错误和异常(添加到混淆我不知道如果我的错误和异常的定义也完全正确)。处理“异常”,很有可能成为“错误”

我感到困惑的地方是如何阻止异常成为一个错误。假设我有一个拥有一堆关系的模型类。该模型具有可在模型中创建循环引用的Model.AddRelationship()方法。如果用户试图在创建循环引用的UI中添加关系,则必须阻止他们这样做并告知原因。所以我解决了一些选项,例如:

// In the UI when the user tries to add a relationship: 

var newRelationship:Relationship = new Relationship();

if(Model.AddingThisWillCreateACircularReference(newRelationship))

{

this.warnUserAboutCircularReference();

}

else

{

Model.AddRelationship(relationship);

}

我认为它的一部分认为它应该在开发者调用之前验证呼叫。毕竟,添加关系并不会导致程序崩溃,而是其他代码执行导致无限循环的操作。在另一方面,我觉得有义务保持模型处于安全状态在任何时候,而且我需要强制开发者做这样的事情来处理不良循环引用的情况:

// In the model itself: 

public function AddRelationship(relationship:Relationship):Boolean

{

var success:Boolean = true;

if(this.AddingRelationshipWillCreateACircularReference(relationship))

{

success = false;

}

else

{

this.addRelationship(relationship);

}

return success;

}

这样,他们要么知道不可能添加,要么关系根本不会被添加。这也感觉不对。任何人都可以给我一些想法,可以帮助我清楚一些吗?提前致谢。

回答:

按照惯例,“错误”表示应用程序无法完全处理或从中恢复(即磁盘崩溃)的情况。例外情况是应用程序可能会尝试从中恢复,甚至在关闭之前自行清理的异常情况。

我发现将异常分为两种类型非常有用:业务异常(这是由应用程序的错误配置或处理不当引起的情况(即,验证异常))和技术异常(这些情况不是由应用程序本身引起的)即失去与数据库的连接,套接字超时等)。

回到你的问题,你是否正确:模型应该始终保持一致,并且应该在尽可能最低的水平上执行,以促进重用。因此,将验证放在模型中,尝试操作,如果失败则通知用户。如果您的语言中没有作为本机机制的异常,我会尽可能返回一个表示操作结果状态的“结果代码”(即0 - 成功,1-循环依赖,2 - 某些未知原因等)。

回答:

我通常使用的规则是,如果用户可以更正“错误”,那么不要抛出异常。如果“错误”是真正意想不到的,并且用户无法修复他或她的输入以通过它,那么它应该抛出异常。如果您正在主动检查问题(例如编写代码以确保存在文件或文件夹路径),那么您应该优雅地处理情况并将其呈现给用户,而不会抛出异常。

以上是 处理“异常”,很有可能成为“错误” 的全部内容, 来源链接: utcz.com/qa/263249.html

回到顶部