我想知道如何在以下两者之间做出决定:
1)如果要抛出自定义异常或
2)返回具有“CityNotFound”、“ReferenceConstraintBroken”等标志的日志对象。
我一直在读例外情况是昂贵的。如果我只需要知道流程结果的具体细节,在我看来,拥有一个只包含流程必需信息的自定义“流程日志对象”会更有益处。
所以,如果我回到我的问题:
什么时候最好抛出一个异常,什么时候最好返回一些错误日志'object‘?
发布于 2011-04-18 08:19:17
如果您关心异常的性能,您可以考虑“测试者-执行者”模式,在大多数情况下可以用来避免它们(在我看来,它还使代码比尝试/捕获更易读)。
// Traditional try catch
try
{
var record = myDb.myTable.Select(primaryKey);
// do something with record...
}
catch (RecordNotFoundException)
{
// The record not found in the database... what to do?
}
// Tester-doer pattern
if (myDb.myTable.RecordExists(primaryKey))
{
var record = myDb.myTable.Select(primaryKey);
// do something with record...
}
else
{
// The record not found in the database... what to do?
}结果一样,没有例外。代价是您必须自己编写"RecordExists“函数,通常只需执行myTable中的返回计数( PrimaryKey=foo == 1)之类的操作即可。
发布于 2011-04-18 08:00:44
轻微地转动他们的头。考虑一下,我知道如何在函数中处理这个条件吗?代码是否会被频繁调用,以便在编写代码时值得,或者,更普遍地说,这是一个例外吗?
如果大小写发生在函数的常规操作中,则将其作为返回值的一部分处理。如果发生此情况是因为您的函数被滥用或某些资源不可用,则抛出异常。
发布于 2011-04-18 07:52:49
如果调用者本可以阻止异常(比如知道该城市不存在),则抛出一个异常。否则返回错误。
我永远不会返回log对象。它使代码不可读,因为您必须在任何地方添加if语句和特殊处理。最好添加像CheckIfCityExists这样的方法。
https://stackoverflow.com/questions/5699959
复制相似问题