zoukankan      html  css  js  c++  java
  • CSLA中业务层事务的实现

    在企业级开发中,为保持业务数据的一致性,事务是经常需要用到的。

    在CSLA框架中,有文章说只要给方法加上标签([Transactional(TransactionalTypes.TransactionScope)]),就可以实现。经过我的大量实践,这个标签没有作用。

    我们最初使用的是SqlTransaction,将事务作为参数在方法之间传递,这样做会产生两个问题:

    1.业务方法间的调用发生在数据访问层DAO,这样必然会将一些业务逻辑也写在数据访问层,业务逻辑层将失去应有的作用。

    2.事务很难控制,代码量大,在调用其它业务方法时,不一定会有事务的参数。

    解决办法是在业务逻辑层使用 TransactionScope(经量级事务),方法如下:

    1.在工程中引用System.Transactions.dll

    2.在类文件中引入命名空间using System.Transactions;

    3.重写CSLA的方法,代码如下:

    ResumeScore类的Save方法
     1         public override ResumeScore Save()
     2         {
     3             ResumeScore resumeScore = null;
     4             using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
     5             {
     6                 resumeScore = base.Save();
     7                 ts.Complete();
     8             }
     9             return resumeScore;
    10         }
    Resume类的Save方法
     1         public override Resume Save()
     2         {
     3             Resume resume = null;
     4             using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
     5             {
     6                 resume = base.Save();
     7                 if (this.ResumeScore != null)
     8                 {
     9                     this.ResumeScore.Save();
    10                 }
    11                 ts.Complete();
    12             }
    13             return resume;
    14         }

    在上述代码中,Resume的Save方法中调用ResumeScore的Save方法,这样业务处理就写在了业务层,并且实现了事务的处理。

    说明, TransactionScope的说明与用法,请参考:http://www.cnblogs.com/zhangpengshou/archive/2009/07/20/1527269.html

    注意:需要启动分布式事务及开启网络访问,可以查阅其它资料,如http://www.cnblogs.com/dengsu888666/archive/2007/04/02/696555.html

  • 相关阅读:
    重置主键自增
    tp5引入第三方类库
    判断浏览器是否是手机端
    网站二级域名的配置
    阿里云服务器php环境的搭建
    备忘录——二维码
    (3) 编写一个截取字符串的函数,输入一个字符串和字节数,输出按字节书截取的字符串,但是要保证汉字不能截半个
    (2) 假设字符串类似这样的aba和aab就相等,现在随便给你二组字符串,请编程比较他们看是否相等
    (1) 一个字符串,根据输入参数m,找出字符串的m个字符的所有字符串
    Windows下MySQL双向同步及环形同步的实现
  • 原文地址:https://www.cnblogs.com/brawei/p/1805773.html
Copyright © 2011-2022 走看看