设计接口时应该如何设计业务异常?
来源:互联网 发布:网络怎么买彩票 编辑:程序博客网 时间:2024/06/05 04:32
本文为原创,转载请注明
作者:cha1R(tanjiayqq)
Java里异常分两种,一种是检查(checked)的,一种是非检查(unchecked)的。
非检查以RuntimeException作为典型代表,它有一个特点就是我们可以不用捕捉它,如果没有捕捉它,它会一直往上抛直到main()方法处理,从而退出整个程序。注意如果是多线程的话,它并不会在main()方法终止程序,它会一直往上抛直到run()方法,而run()方法没有捕捉它的话会终止线程。
作为业务异常,是要反馈给用户的,所以我们不希望发生任何终止线程或者终止程序的代码。所以定义业务异常,我们一般使用检查的(checked)异常,定义一个异常非常简单,只需要写一个简单的类继承Exception即可。
public class InvalidAccount extends Exception{ private static final long serialVersionUID = 1L; public InvalidAccount(){ super("无效的账户"); } public InvalidAccount(String msg){ super(msg); }}
那么我们一般什么时候需要设计业务异常呢?从我的经验来看,一般是设计业务接口的时候需要考虑这个接口会引发的业务异常。
假设设计一个登陆业务接口:
/** * 登录 * @param username 用户名 * @param password 密码 * @return 是否登录成功*/ boolean login(String username,String password);
显然这个接口没有抛出异常,那么我们在还没实现接口的情况下,该如何考虑这个接口会发生什么样的异常?
其实我们很难全面地预测到它会发生一些什么,但是我们只需要考虑业务异常,业务异常是什么?即应用异常(如 权限不够等),这类异常需要通过前台反馈给用户,友好提示用户当前操作异常。
最大的特点就是,这个异常一定是由于当前接口调用不当(即用户操作不当,因为它接收的是用户输入的数据)造成的,那么最直接的思路就是从传入参数入手:
从登陆接口来看,传入的是用户名和密码,那么我们可以抛出一个“无效的用户”或者抛出“无效的用户名”和“无效的密码” 异常,其他的都不用抛出,因为它并不是由调用者引发的,在方法内部处理完就行。
再来看看一个我们一个项目的业务接口,评论微博:
/** * 评论 * @param userId 被评论的用户的ID * @param weiboId 被评论的微博的ID * @param content 评论内容 * @return */ boolean comment(String userId,String weiboId,String content);
定义这个方法的异常还算比较简单,从参数入手
userId:用户不存在异常
weiboId:微博不存在异常
content:内容包含敏感词汇异常,内容超出字数限制异常。 或直接用一个 内容不合法异常
这些都是可以抛出的异常。
但是有时候一条微博可能被设置为 “不可评论”,那么我们是不是要再跑出一个“不可评论异常”?这个完全不必抛出,因为我们抛出业务异常是用来反馈给用户看,从而让用户做出相应处理,但是这种不可改变的情况完全没必要交给用户决定如何处理,只需要在方法内部抛出RuntimeException,UI层统一捕获,提示一下即可。
最后介绍一个学习网站,比较适合初学者,视频略多:Here
- 设计接口时应该如何设计业务异常?
- 接口应该如何设计
- 业务逻辑层接口设计
- 算法设计应该依赖抽象而不是业务
- 算法设计应该依赖抽象而不是业务
- 算法设计应该依赖抽象而不是业务
- DAO接口如何设计?
- 如何设计接口?
- 如何设计接口
- 业务设计
- 如何丰富业务层的代码设计
- Android业务中间层该如何设计?
- 设计三层异常如何处理?
- 程序员应该如何去设计需求
- 程序员应该如何去设计需求
- 做网页设计,应该如何发展?
- 应该如何写详细设计文档
- 接口的设计应该从小到大,还是从大到小?
- Ubuntu创建桌面启动器的两种方法
- Linux下map hash_map和unordered_map效率比较
- 今日学习C
- 基于spring实现的restful webservice返回json数据
- 算法设计与分析--01背包问题(动态规划法解决)
- 设计接口时应该如何设计业务异常?
- java多线程总结
- NCT-2000-XP
- Django 学习笔记(三)
- LeetCode题解:Word Break I and II
- Java 程序 bit 和 byte 区别
- 深入调试的技术和工具读书笔记二
- 银行家算法
- 总线错误与段错误