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 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题