三种模式实现分层结构下transaction数据访问层与业务逻辑分离

作者:小菜 更新时间:2025-03-16 点击数:
简介:三层结构下,数据访问层与业务逻辑分离。

从对象关系角度看,业务逻辑层的对象依赖于数据访问层。

.net平台提供了ado.net对数据库进行操作,connection

【菜科解读】

三层结构下,数据访问层与业务逻辑分离。

从对象关系角度看,业务逻辑层的对象依赖于数据访问层。

.net平台提供了ado.net对数据库进行操作,connection对象提供了对database连接与transaction的功能。

在分层结构下,数据访问层处理了对数据库的操作,实现了domain每一个对象与database的方法。

例如对象Customer,提供CustomerDAO.Add(),CustomerDAO.Update()等等的方法,每一个方法都会引用独立的connection对象。

业务层直接调用CustomerDAO的方法。

connection对象对业务层是close状态,业务层不能访问到并且控制ado.net提供的transaction。

在不破坏分层体系结构前提下一般有三种方式来实现。

System.Transaction:.net提供的一个使用很简单的解决方法。

System.Transaction允许对local和distributed数据库进行操作。

使用System.Tansaction不用考虑是一个或者多个connection,一个或多个数据库。

例如可以使用TransactionScope,举个例子,下面的code很直观,using (TransactionScope scope = new TransactionScope()){SqlConnection connection1 = new SqlConnection(connectString1)SqlConnection connection2 = new SqlConnection(connectString2)scope.Complete();}有两个connection,System.Transaction会整合成一个tranaction来处理,那么我们只需要在业务层需要transaction的地方使用TransactionScope就可以了,很方便。

虽然方便,但还是有不利的地方。

因为System.Transaction会自动监测connection,如果只有一个,就直接使用ado.net的transaction,perfomance不会影响。

但如果是上面的code,有两个以上的connection,System.Transaction会自动升级为distributed级别,这样performance会打了折扣。

而且对于除sqlserver一些其他的数据库例如oracle,一直会是distributed级别。

这种方式只适合对于performance要求不是很高的项目。

Connection/Transaction参数传递给DAO:这种方式的思路是DAO的对象每一个对象需要提供一个参数来接受是否需要transaction的信息。

例如可以自定义一个MyTrans类,MyTrans类引用一个connection对象。

public class MyTrans{public IConnection connection;public void beginTrans();public void commitTrans();}这样一个包装过的类,就可以使业务层的对象对connection间接的进行操作,例如业务层类customer.Update()就可以这样实现。

using(MyTrans tran=new MyTrans){tran.beginTrans();CustomerDAO dao=new CustomerDAO(tran);dao.Add();tran.commitTrans();}这样实现,对开发的复杂度会增大,DAO需要每个类都要实现一个接受Trans的参数。

这种方式适和那种有充足时间而且想亲自操作数据库的项目。

AOP实现Transaction:这种方式可以参考Spring提供的AOP机制与Spring的Transation,Aop的内部实现是采用了反射原理,利用Typebuilder对Class的Methord进行重新编排,使在逻辑层的对象方法内部自动的加入Connection的transaction的操作。

Spring提供了一个声明的方式,很方便快捷,而且由于使用的Ado.net进行操作,所以performance没有受到任何影响。

如以下Code,只要简单的声明就可以了。

public class TestObjectManager : ITestObjectManager {// Fields/Properties ommited[Transaction()]public void SaveTwoTestObjects(TestObject to1, TestObject to2){TestObjectDao.Create(to1.Name, to1.Age);TestObjectDao.Create(to2.Name, to1.Age);}[Transaction()]public void DeleteTwoTestObjects(string name1, string name2){TestObjectDao.Delete(name1);TestObjectDao.Delete(name2);}}这种方式适合项目较大,需要快速开发,而且项目决策者愿意使用工具的项目。

三种,模式,实现,分层,结构,下,transaction,数

哪三种剩菜不能放冰箱里?这几种剩菜吃不得

在中国的饮食文化中,很多人都有吃剩菜的习惯尤其是老年人,他们一般觉得将剩菜不吃是浪费可耻的行为,甚至有些时候吃1-2天都觉得没事,最科学的说法是最好不吃剩菜,尤其是这几类千万别放冰箱!哪三种剩菜不能放冰箱里第一种,卤肉凉拌菜。

散装的卤肉和凉拌菜最好还是要当天吃完。

把这类食物放进冰箱一点也不是保险的做法,因为冰箱里易滋生霉菌、嗜冷菌等细菌,有些人吃了可能会引起中毒事件。

第二种是银耳。

银耳脆口美味,制成甜食非常可口。

但事实是,银耳无论是野生还是人工种植,都会含有较高含量的氙酸盐,经过烹调后会还原成亚硝酸盐,当天吃的话能起到很好的保健作用,但是一旦隔夜,亚硝酸就会起反作用,导致人体内缺乏正常的造血功能。

第三种是打开了的生鸡蛋。

有时候不小心磕破的鸡蛋,或者是打开后突然不想用了的鸡蛋,人们都会选择用碗盛装起来后放进冰箱,等想吃的时候再拿出来吃。

其实这种做法很不值得提倡,这是因为生鸡蛋含有很有的细菌和病毒,最主要的就是沙门氏菌。

而生鸡蛋放冰箱很容易滋生细菌,食之易造成肠胃不适、胀气等健康问题。

在一般情况下,通过100℃的高温加热,几分钟即可杀灭某些细菌、病毒和寄生虫。

但是对于食物中细菌释放的化学性毒素来说,加热就无能为力了。

加热不仅不能把毒素破坏掉,有时反而会使其浓度增大。

另外,在各种绿叶蔬菜中都含有不同量的硝酸盐。

硝酸盐是无毒的,但蔬菜在采摘、运输、存放、烹饪过程中,硝酸盐会被细菌还原成有毒的亚硝酸盐。

尤其是过夜的剩菜,经过一夜的盐渍,亚硝酸盐的含量会更高。

5、最容易引起胃肠道疾病的水产品人们通常认为不会导致疾病的蔬菜,过夜后经一夜盐渍,亚硝酸盐含量会增加,加热后毒性增强,因此蔬菜反而是最不能隔夜的。

另外,淀粉类食品也最好一次吃掉,年糕等食物最多保存4小时,在没有变味的情况下食用也可能会引起不良反应。

剩菜分类存放保鲜得当用盘子储藏剩菜往往不能有效利用冰箱的空间,建议提前准备一些容积较小的方形、长方形的保鲜盒,把剩菜分类装进保鲜盒中,再整齐地排列在冰箱中。

最容易变质的食物,如豆制品和海鲜,应当放在冰箱下层深处,或者保鲜抽屉当中,因为这里的温度最低。

水分含量较低的炸鱼、炸丸子之类,则可以放在略微靠外的部分,因为这里温度相对较高,特别是冰箱开门时温度不够稳定。

剩的果汁之类可以放在冰箱门的部位,因为果汁比较酸,细菌不易快速繁殖。

要注意,有这三种人坚决不能吃桂花

桂花在生活中是可以用来泡茶的,也是可以用来制作成各种糕点类食材的,但是要注意,有这三种人坚决不能吃桂花,是不利于身体处于良好的状态的,其中就有孕妇、血糖高者以及肠胃不好的人,对于孕妇来说食用桂花茶小心流产的情况,桂花可以活血的。

三种人坚决不能吃桂花1、孕妇不宜服用食用对于孕妇来说,身体是比较特殊的,虽然桂花泡水是对人体有好处的,但是在怀孕期间就不要喝桂花泡水了,因为桂花是可以活血的,这会对肚子里的孩子不好的,以免诱发流产。

2、血糖高的人不宜食用对于血糖高的人来说,如果想要喝桂花茶的话,最好是不要喝的,因为桂花它是温性的,对于血糖高的人来说并不是适宜的,可能会对病情不是很有利,最好还是需要注意下,在桂花做的一类糕点,桂花糖之类的食品,对于糖尿病患者来说,也是不宜的。

3、肠胃不好的人不宜食用对于肠胃不好的人来说,胃部处于良好的状态有问题的话,是不宜服用桂花的,大家在平常生活中,是会用桂花泡水的,可是肠胃不好的人是不宜的,本身在胃病期间,有胃痛等情况,菜叶说说,就更不要喝了。

大家看到这里,应该对于哪三种人坚决不能吃桂花,有所了解了,事实上,不仅有上面的人情,一些体质偏热的人群也是不宜食用,小心肝火更加旺盛,在用桂花泡水的时候,也是要注意其九大禁忌,泡水也有讲究。

加入收藏
               

三种模式实现分层结构下transaction数据访问层与业务逻辑分离

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录