`
xly_971223
  • 浏览: 1277445 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DAOException 在业务层的处理方式

阅读更多
在dao层通常会抛出一个DaoException如下
class UserDao{
    public void insert(User user)throws DAOException{
        //dao code
    }
}

在业务层调用时应该怎样处理这个DAOException呢?
个人认为用两种方式 第一种方式: 不进行处理直接抛给web层  第二种方式 转换成某种业务异常
第一种的缺点是将底层的异常暴露给了客户端  优点是web层可以明确感知到dao层发生异常并告知浏览器用户
第二种正好跟第一种相反: 缺点是web层不知道发生了dao异常,catch到的是一个业务异常,优点是dao异常不会暴露给web层
现在就到底使用那种方式比较困惑
分享到:
评论
10 楼 银色幻想 2006-11-26  
这样的话dao层是不是不用写log了,直接在service层和web层记录
9 楼 抛出异常的爱 2006-11-24  
xly_971223 写道
抛出异常的爱 写道
在你们看来?
日志这东西是没用的....

如果是非预见异常直抛...
如果是可预见异常处理一下写个日志就行
而且DAO异常与Service异常共用?
.....强

请问 抛出异常的爱 是怎么处理的呢?


好别扭的....发问?

在Serviec层中所有能想到与必作的异常都捕捉

不能想到的用serviceException包装后抛出
8 楼 xly_971223 2006-11-24  
抛出异常的爱 写道
在你们看来?
日志这东西是没用的....

如果是非预见异常直抛...
如果是可预见异常处理一下写个日志就行
而且DAO异常与Service异常共用?
.....强

请问 抛出异常的爱 是怎么处理的呢?
7 楼 抛出异常的爱 2006-11-24  
在你们看来?
日志这东西是没用的....

如果是非预见异常直抛...
如果是可预见异常处理一下写个日志就行
而且DAO异常与Service异常共用?
.....强
6 楼 ddandyy 2006-11-24  
业务判断到插数据库还是有间隔的
理论上说  这个异常一定会出现的
5 楼 xly_971223 2006-11-24  
myreligion 写道
我们的做法是所有异常在web层处理,通过spring的那个exceptionHandler把异常分到不同的页面上,然后给出通用的提示信息,好比没有权限,密码错误,系统错误....。然后在页面的隐藏地方把堆栈信息打出来,方便沟通与调试的时候使用。

我也倾向于myreligion这种方式
现在的问题是 DAOException是直接传到web层还是转换成业务异常
4 楼 xly_971223 2006-11-24  
ddandyy 写道
只扔这个太大了一些吧

如果是主key重复之类的  应该是要报过去的

其他的比如连不上DB之类的   写ERROR_LOG文件就是了


在DAO层是这样处理的 :将所有的在访问数据中遇到的异常都转换为DAOException,被转换基本上都是一些不可预知的异常 如数据库连接错误  hibernateException等
实际上我个人认为这类异常即使抛出,基本我们也没有办法处理。 所以在有些应用种直接抛出RuntimeException
至于主键重复之类的 我觉得应该放在业务层去判断比较好 而不应该直接去插 等待重复时报告异常
3 楼 myreligion 2006-11-24  
我们的做法是所有异常在web层处理,通过spring的那个exceptionHandler把异常分到不同的页面上,然后给出通用的提示信息,好比没有权限,密码错误,系统错误....。然后在页面的隐藏地方把堆栈信息打出来,方便沟通与调试的时候使用。
2 楼 together 2006-11-24  
就某些应用而言,把详细的error暴露给web层也不见得是坏事。
用户那边可能没有专业的技术人员,你叫他去后台查log可能不太现实。让用户直接看到详细的错误信息,沟通起来也方便一些。当然我们的用户都比较弱的。

最我见过的一个弱智的报错方式,用户登录不成功,系统就报一个“您的用户名或密码不正确,无法登录”。而实际上有多种可能的,可能是数据库没连接上,可能是sql语句本身就是写错了,也可能用户不存在,也可能密码不对,也可能用户被禁用。但是你报这个错误出来给用户,就很难沟通解决问题。
1 楼 ddandyy 2006-11-24  
只扔这个太大了一些吧

如果是主key重复之类的  应该是要报过去的

其他的比如连不上DB之类的   写ERROR_LOG文件就是了

相关推荐

    应用分层及规约

    5. **Manager层**:这是一个通用业务处理层,负责对第三方平台的封装,处理返回结果和异常,以及通用能力的下沉。 6. **DAO层**:作为数据访问层,DAO层负责与数据库(如MySQL、Oracle、HBase)进行数据交互。 7. ...

    设计规约架构师成长之路

    异常处理方面,文章提出在DAO层应捕获所有异常并转换为统一的DAOException,避免过多的日志记录。Service层需要记录详细的异常日志,而Web层则需要根据异常情况决定是跳转至错误页面还是以友好的方式向用户反馈错误...

    java开发异常处理与日志规范

    11. **定义异常类型**:避免直接抛出new RuntimeException(),而应使用具有业务意义的自定义异常,推荐使用已有的自定义异常如DAOException、ServiceException等。 12. **错误码和异常的使用**:对外的HTTP/API接口...

    DAO

    当DAO层遇到无法恢复的异常,例如SQL查询失败或数据库连接问题时,它会抛出DaoException,帮助上层代码处理和记录这些异常情况。 3. **Messages.java** - 这可能是包含有关DAO操作的错误消息或提示的类。这些消息...

    java异常框架处理.pdf

    Java异常框架处理是Java编程中十分关键的一部分,主要涉及到Java异常类的层次结构、异常的分类、异常的处理方式,以及如何在实际开发中使用异常框架来处理各种运行时错误。 首先,我们需要了解Java的异常类的层次...

    JDBC连接数据与增删改查操作_MVC基础上的客户管理系统

    Service层作为业务逻辑的集中处理点,它调用DAO层进行数据存取操作,并可能包含额外的业务规则处理。例如,`CustomerService`可能提供更高级别的操作,如批量导入客户数据。 #### 6. 控制器实现 控制器部分负责...

    Ibatis调用存储过程调用存储过程

    总的来说,这主要包括三个方面的工作:定义XML映射文件中的存储过程参数映射和调用方式、实现Java层的DAO接口以及在数据库中创建对应的存储过程。这些步骤结合起来,使得开发者能够在Ibatis框架下灵活高效地使用存储...

    Java对象持久化的介绍等等

    2. **降低维护成本**:避免了在不同层之间混合使用数据库访问代码,减少了出错的可能性,简化了系统的复杂度。 3. **提高开发效率**:采用持久化框架可以减少大量的模板代码,让开发者专注于业务逻辑的实现。 #### ...

    如何对多对多关系获得的set集合中的记录进行分页

    在Action层和JSP页面中,我们仍按照之前的方式获取和展示数据,但此时的数据源已经是多对多关系的子集。 总结来说,SSH框架中的分页主要包括以下几个步骤: 1. 创建`PageModel`类来存储分页信息。 2. 在`Dao`层实现...

    java 修改删除返回当前页面问题解决办法.docx

    2. **在服务器端处理**:这种方法的核心思想是在服务器端处理完成后,将用户重定向至正确的页面位置。 本文将详细介绍第二种解决方案的具体实现步骤及代码示例。 #### 三、具体实现方案 本节将详细讲解如何在...

    UAP63-1RIA-单据开发

    UAP63-1RIA-单据开发 用友官方资料

    内部排序算法大总结Java版

    在每次内层循环中找到最小值的位置,并在一次外层循环结束后再进行一次交换操作。 ```java public static void selectSort2(DataWrap[] data) { int len = data.length; DataWrap temp; for (int i = 0; i ; i++)...

    hibernate

    在JDBC中,开发人员经常遇到大量代码重复、绑定到特定数据库、易出错的try/catch/finally块、难以处理的关系(如N+1选择问题和父/子更新)等问题。这些问题导致了开发效率低下和代码维护困难。为了解决这些问题,...

    ibatis 实例

    通过上述介绍可以看出,ibatis提供了一种高效、灵活的方式来处理Java应用程序与数据库之间的交互问题。它不仅简化了开发流程,还提高了代码的可维护性和可扩展性。对于那些希望减少对ORM框架依赖、更直接地控制SQL...

    MyBatis 参数类型为String时常见问题及解决方法

    需要注意的是,这类问题不仅限于`<if>`标签,其他如`<choose>`, `<when>`, `<otherwise>`, `<where>`, `<set>`, `<foreach>`等动态SQL标签在处理String参数时也可能遇到相同的问题。 总之,理解MyBatis在处理String...

    NC65通过BaseDAO操作数据库

    NC65通过BaseDAO操作数据库,包含接口类及接口实现类: /** * 获取baseDAO * @return */ public BaseDAO getBaseDAO() { if(baseDAO == null){ baseDAO = new BaseDAO(); } return baseDAO;...

    前端-后端java的Util类的工具类

    │ │ ftp二进制与ascii传输方式区别.txt │ │ IPDeal.java │ │ Md5.java │ │ MD5Encrypt.java │ │ MyFileFilter.java │ │ PropsUtil.java │ │ RegExUtil.java │ │ SimpleConfig.java │ │ ...

Global site tag (gtag.js) - Google Analytics