我一向对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提示页面;异常处理链条至此结束;
希望大家能给出解决的方式,多多交流;
只需要在action 处理一场,同时记录log,dao,service都抛出。
建议看看这篇文章http://www.iteye.com/topic/72170
异常处理确实是门学问,需要不断摸索,处理太通用就没法满足问题定位,处理的太复杂又无法满足组件化开发,一次开发,各个系统通用的目的。希望能和大家多交流。我的想法是多模拟异常出现及应用的场景,然后找出共性的东西进行设计。