iteye_19447 2009-12-22 21:33
浏览 351
已采纳

JAVA 的异常处理!

我一向对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提示页面;异常处理链条至此结束;



希望大家能给出解决的方式,多多交流;

  • 写回答

3条回答 默认 最新

  • Ryankay 2009-12-24 11:08
    关注

    只需要在action 处理一场,同时记录log,dao,service都抛出。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器