请教下自定义接口抛出异常的合理性

09-06-10 yingwu1206
我现在要定义一个接口,这个接口是传进一条SQL从数据库中查出一条记录,现在如果在查询的过程中发现查到得记录不止一条,这时候我该不该抛出一个异常?

我个人认为应该,理由如下:我定义这个接口是就是为了从这个接口中获得唯一的一条记录,如果实际有两条记录这就说明传进来的sql是错误的,我应该抛出异常让调用者知道,而不是返回两条记录中的任意一条

ACoder
2009-06-10 10:24
对,应该抛出异常

tearoffhu
2009-06-11 15:31
不,不应该抛。sql错误跟是不是一条记录没什么关系。

除非sql特别复杂,一般只要运行的过去,就是正确的。

之所以要你保留是为了灵活性。如果逻辑需要特别处理,你再调整,最好不要异常,否则会麻烦的。

yingwu1206
2009-06-11 18:32
谢谢两位的回答,抛不抛异常也是我和同事讨论的,我是主张抛出的,那么请问楼上一般什么时候抛出异常可有什么原则可供遵循?

ACoder
2009-06-12 08:25
这种条件必须抛出异常,当你确定应取得记录数为1,那么取出2条,说明数据存在问题或者程序存在问题,也就是说运算的结果可能是错误的,这种情况下必须给用户一个提示,否则只是为了程序能够通过而不负责任,这会给使用者带来极大的风险,所以必须抛出异常。

freebox
2009-06-12 08:57
异常必须得有,问题是应该在哪一层次上掷出,如果接口是数据操作接口,它的目的就和业务目的不一样,对数据接口只有sql执行不过去的时候掷出异常。

这个异常应该在业务层次掷出,取出数据是两条或以上是sql正确的,是业务不正确的。

tearoffhu
2009-06-12 09:06
我的原则是

第一 在返回值不行的时候就抛异常。

第二 需要的话就抛。

第三 尽量不要影响别的人(比如用接口,就是尽量避免的)。

tearoffhu
2009-06-12 15:25
我做接口的原则是这样的。

和发布无关的接口:尽量简单,不要讨论他们的含义,好用就可以。

和发布相关的接口:尽量全面,扩展性一定要好。

猜你喜欢