Transaction 和 DataAccess的关系得一点想法

Transaction 和 DataAccess的关系得一点想法

我们现在的系统一般都会采用分层的方式来设计。作为程序基础的DataAccess层在每个项目中都有体现。

我大概的绘制了一个从Business 层开始读取数据的一个理想状态。


Business Layer中我们都时采用对象的方式来描述世界。我这里所说的对象不只是就是指ORM框架中说的实体类。可以使我们为了转换成htmlDocument类(采用xslt技术)、POPOJO。但是这些类有一个共同的特点他们的产生需要从数据库中读取信息。这些应该是我们一般项目关注的重点(有特殊需求的除外。如EBMS需要在表现层有出色表现,那么她的关注重点就会在表现方式上了)。

Dao Layer 是理想状态的一个层。他本来的用途是隔离事务层和数据层(我这里所说的数据层包括上图中的 Dao Layer DataAccess层)方便以后切换数据读取得方式(如:换个数据库连接、数据库服务器类型以及换个ORM框架等等)。在这里我把他理解层ORM层了(就如mBomhibernate所起的部分作用)。

DataAccess Helper 这个层次应该是我们每个项目中都有的即将基础部分。他的用途就是去执行Sql的。可不要小看这个东西啊,为了能够顺利地执行Sql他还肩负起了管理数据库连接池,以及数据库连接关闭的重任。说他是重任,那是因为这一部分如果处理不当,及没有正确的管理连接池和连接的关闭。会造成资源的泄漏,严重的会拖垮系统。绝非危言耸听。

 

说完了以上各个层的功能。问题就提出了Transaction这个在和数据库紧密关联的东西应该放在哪个层来处理?先前我们只是把他安置在DataAccess,这样做的理由就是实现简单。这样就会出现另外一个问题:(问题说出来以后不要用东西砸我)Transaction应该属于Business Layer的(一个天下人读知道东西)。问题在于我们却把他放在了DataAccess中(数据层的一个子层中)。这样就会使我们的程序在Business Layer中随处可见DataAccess层的东西。所以我个人觉得在我们的下一版DataAccess层(也就是我现在想做的借助于JdbcTemplate的这一版)中是否可以考虑把Transaction放回Business Layer中去。

初步构想:


BenQJdbcTemplateManager用于管理各个DataSource所对应的JdbcTemplate

下面结构是我理想中的一种结构:

如果再Business Layer中只是需要获得一个对象可以这么写:

DemoDaoObject     demoDaoObject = new DemoDaoObject();

Object object = demoDaoObject.getObject();

 

如果需要在一个Transaction中去保存一个Object。可以写成如下结构:

TransactionManager tm = BenQTransactionManager.getTransactionManager();

TransactionStatus status = tm.getTransaction(td);

DemoDaoObject     demoDaoObject = new DemoDaoObject();

demoDaoObject.saveObject(object);

tm.commit();

这只是我的一个构想。大家有什么好的建议可一定要告诉我。先谢谢了!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值