`
xly_971223
  • 浏览: 1288330 次
  • 性别: 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文件就是了

相关推荐

    应用分层及规约

    4. **错误码和错误信息**:开放接口层在异常发生时,应将异常处理为错误码和错误信息的方式返回给调用方。 ### 分层领域模型规约 领域模型是业务逻辑的抽象和建模。在分层架构中,不同层会使用不同的模型对象: 1...

    设计规约架构师成长之路

    开放接口层用于提供对外服务,Web层主要负责访问控制和基本参数校验,Service层处理业务逻辑,Manager层则对第三方平台进行封装和通用能力下沉,DAO层负责数据访问。这种分层设计有利于代码的组织和维护,提高了系统...

    DAO

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

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

    控制器部分负责接收来自用户的请求,调用Service层处理业务逻辑,并返回适当的响应。例如,`AddNewCustomerServlet`用于处理添加新客户的请求,而`ViewCustomerListServlet`则用于展示客户列表。 #### 7. 整合与...

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

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

    Java对象持久化的介绍等等

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

Global site tag (gtag.js) - Google Analytics