我正在审查一些团队代码,我发现了这样的东西:
MyObj obj = null;
try {
obj = myService.findObj(objId)
} catch (MyObjNotFoundException e) {
// The object wasn't found, it's the "normal" path
// Here they create the object in DB (but don't touch the obj variable)
// There is about 60 line of code
}
if (obj != null) {
// The object already exist, logs are written and some queue is filled
// with current objId to be processed later on
}
在我的评论中,我会写到,Exception
就性能或可维护性而言,使用来控制正常的程序流程并不是一个好主意。最好的办法是修改服务以返回null
而不是抛出异常但是:
- 我不确定他们是否拥有该服务(可能是另一个项目/团队)
- 他们可能真的在其他地方需要这个例外
所以除了除非不抛出异常否则无法解决的性能问题,我想给他们一个“更干净”的代码。
这是我知道服务仅发送此异常的想法:
try {
obj = myService.findObj(objId)
} finally {
}
if (obj == null) {
// The object wasn't found, it's the "normal" path
} else {
// The object already exist, logs are written and some queue is filled
// with current objId to be processed later on
}
你会走这条路吗?它真的在可读性上迈出了一步吗?你会想点别的吗?
非常感谢。