数据库操作分层结构总结
来源:互联网 发布:淘宝买的office2016 编辑:程序博客网 时间:2024/06/05 16:31
在持久化数据的读写操作中常常要涉及到 数据库与缓存 的操作,同时由于业务需要常常要对多表进行事务操作。基于结构层次化设计的思想我们常常需要对这一系列操作进行分层设计。
各层的主要职责,以及发生异常如何处理,是向上继续抛出,还是在该层对异常做转换等处理,以及事务中发生异常时缓存的处理等需要一些思考。
以个人的经验为例:
常常将持久化操作分为3层:dao层,manager层,service层
其中
dao层:直接进行数据库读写操作。
发生异常时,向上抛,调用方可以根据捕获的异常信息,找到db放生错误的原因(sql语法错误 还是 重复插入同一主键等)
public List<Something> queryList(SomethingQuery SomethingQuery) throws DAOException;
manager层:改成将配合缓存进行数据库的读写操作。
我的做法
insert: insertDB(something) //直接操作dbquery: something = getSomethingFromCache //首先读缓存,不存在时读db if(something == NULL) { something = getSomethingFromDB putSomethingToDB(something) } return somethingupdate: updateDB(something) //更新db,同时失效缓存中 脏数据 invalidCache(something)delete: deleteDB(something) //删除db中数据,同时失效缓存中 脏数据 invalidCache(something)
该层发生异常时,对外抛出,不曾不作处理。我之前的做法,在该层多异常作处理,如发生异常时 我就返回null, 这样的弊端在于 调用方对null无法做进一步的区分(是发生异常 还是 db与缓存中 均不存在 导致返回null),从而使容错性能下降,例如如果能是异常导致的,则可以进行多次尝试,而当数据不存在时,就需要立即返回作处理了。毕竟manager层相对来说层级较低,说要向上层调用方提供尽可能多的信息,方便做容错等错里。
service层:在该层常常会根据业务的需要做多表的事务操作。
update: doInTransaction(TransactionStatus status) { try { Long tableId1 = table1.insert(something1); Long tableId2 = table2.insert(something2); } catch (Exception e) { status.setRollbackOnly(); } }
该层发生异常时,常常会根据业务需求作转换,例如对于查询失败操作,可以将失败的具体信息一并返回调用方,便于问题排查。
queryResult.isSuccess = false;queryResult.msg = “db error”;queryResult.msg = “不存在”;
0 0
- 数据库操作分层结构总结
- 分层结构与servlet学习总结
- 分层中数据库的简单操作?
- 分层实现JSP通过JDBC操作数据库
- 分层结构
- 根据类分层结构设计Hibernate Mapping与数据库表结构
- 数据库结构操作
- 数据库结构操作
- 数据库结构操作脚本
- java面向对象高级分层实例_数据库操作类
- 结构分层的经验谈
- java.lang分层结构
- java.lang分层结构
- 分层存储结构
- Java分层结构
- 系统结构分层
- SSH 中的分层结构
- makefile分层目录结构
- 认识HTTPS
- java并发系列——基本线程同步(一)
- MYSQL - SQL_MODE
- 有趣的Ruby-学习笔记4
- 从GitHub上安装R程序包的一点经验(for Windows)
- 数据库操作分层结构总结
- JKS、BKS、PKCS12证书之间转换
- UNITY 4.7.0 发行说明 中文版
- 小林相册批量下载器--相册图片万能批量下载器
- IOS学习:AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件
- 学习笔记UITableView、tablecell
- 【面试必备】iOS-Swift 面试题及其答案
- 艺龙十万级服务器监控系统开发的架构和心得
- Java基础知识总结(四)——异常与异常处理表