处理“异常”,很有可能成为“错误”
在我目前正在研究的项目中,我有一些问题区分错误和异常(添加到混淆我不知道如果我的错误和异常的定义也完全正确)。处理“异常”,很有可能成为“错误”
我感到困惑的地方是如何阻止异常成为一个错误。假设我有一个拥有一堆关系的模型类。该模型具有可在模型中创建循环引用的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