我一向对DAO以及Service层的异常处理有点儿蒙!
假如是如下结构:
--------------- ----------------- ----------------
- action ---------->- service ---------->- dao -
--------------- ----------------- ----------------
在这三层中,Dao直接利用JDBC与物理数据库发生交互,比如CURD某User表中的记录,这个时候一定会有受查异常SQlException抛出,我们暂且把这点称之为异常处理点(1),如果选择抛出异常,那么在service中会要求处理异常, 比如在Service中有registeUser(User user)方法,我们把此处称之为异常处理点(2),然后在Action层中,我们捕捉到此异常,判断该异常,在UI界面上给用于提示,这里称之为异常处理点(3);
如何处理(1)(2)(3)出的异常,是否抛出异常,抛出什么异常,如何抛出异常,是否做日志记录,如何避免日志重复?
个人认为,
(1)在Dao中,选择记录调试日志(面向开发人员),然后选择抛出异常;(注意此处可能同时抛出多种异常),因为DAo相对于Service而言不存在业务逻辑或者服务概念,故可以选择直接将原生态的异常抛出;
(2)在Service中,个人认为service是门面或者服务,业务逻辑含义很重,故在此处判断Dao层的原生态异常,然后包装成为自定义的应用程序异常,如UserExistsException(“用户名已经存在”)等异常抛出,然后选择在此处记录应用日志(面向系统管理员的);
(3)处理应用程序异常,在此处导航至相应的UI提示页面;异常处理链条至此结束;
希望大家能给出解决的方式,多多交流;
JAVA 的异常处理!
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- Ryankay 2009-12-24 11:08关注
只需要在action 处理一场,同时记录log,dao,service都抛出。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记
- ¥15 保护模式-系统加载-段寄存器