业务逻辑层事务处理的问题

直以来我都对三层架构中,业务逻辑层的存在表示怀疑,我相信有很多的初学朋友都跟我有相同的感受。业务逻辑层顾名思义就应该是处理业务逻辑的。但我一直以为它只启到数据访问层中转作用。甚至我有的项目直接放弃业务逻辑层,直接调用数据访问层的方法来做。但是随着所做项目业务逻辑越来越复杂时,渐渐的感觉到业务逻辑层所启到的作用。由于有些项目我放弃使用业务逻辑层,很多的从表示层输入的数据进行处理和有效验证的方法,我都放在在表示层来处理。但是随着逻辑复杂性的增加,表示层的代码也越来越膨大,给后期的维护带来很多的不便。

        这只是其中的一个问题。当我遇到要同时操作几个表的时候,要用到事务处理,对操作失败的数据要进行回滚,如果把事务的逻辑放在数据访问层来做,同样会带来代码的复杂性,给后期维护带来不便。为此,我一直把事务处理放在存储过程中来处理。像我的项目一直使用SQL Server2000(2005)数据库的,这种方法也是行得通的,假如遇到同时要操作Oracle数据库,我看事务的处理就必须放在代码中来做。这样如果不使用业务逻辑层来处理,而放在数据访问层来处理,业务逻辑和数据访问逻辑混在一起,代码就会很混乱,给后期维护带来诸多麻烦。

        上面只是我个人肤浅的感受,或许业务逻辑层还有很多更重要的作用,不妨给我指点迷津。

        下面是在网络上找到一篇关于说明业务逻辑层重要性的文章供参考:或许从中能悟出点东西来


       .NET在业务逻辑层使用事务
         作者:lanlansky
            http://lanlansky.bokee.com/viewdiary.15823682.html
         银行转帐确实是一个经典的事务案例。而如果该银行的数据库系统只是一种数据库管理系统,比如说是Oracle,或者是 SQL Server 。那么,我们完全可以使用数据库管理系统提供的事务来实现,而根本不需要.NET在业务逻辑层使用事务。有人可能问了,那.NET事务在什么情况下使用呢?如果你仔细看前文所提到的银行使用的数据库系统,那么你就会会想到,.NET事务用在多数据库管理系统或分布式数据库。
        假设某家银行在A地使用SQL Server保存数据,而在B地使用Oracle保存数据,如果要实现从A地的帐户A转帐至B地的帐户B,我们想用数据库管理系统提供的事务来实现可能就望尘莫及了,所以,这里要用到.NET提供的事务处理机制。
        我们要完成这个事务,我们当然要先分清事务内部的任务逻辑:
                1)从A地的帐户A中取款100操作,此操作在SQL Server数据库中完成,需要用到SqlConnection对象;
                2)从B地的帐户B中存款100操作,此操作在Oracle数据库中完成,需要用到OracleConnection对象。

        实现代码:


        // 创建一个 TransactionScope 对象,并开始事务
        using ( TransactionScope transScope = new TransactionScope())
        {
                try
                {
                        // 利用SqlConnection完成从A地的帐户A中取款100操作
                        using ( SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
                        {
                                // 打开 sqlConnection 连接,系统自动使 transScope 为轻型事务,现有一个资源
                                sqlConnection.Open();
                                // 创建一个 SqlCommand 对象
                                SqlCommand sqlCommand = sqlConnection.CreateCommand();
                                // 将帐户A的余额减去100
                                sqlCommand.CommandText =
                                        "UPDATE T_Balance SET C_Amount = C_Amount - 100 WHERE C_BankAccounts = 'A'";
                                // 预执行命令,异常的预判断,处于“挂起”状态(等待事务的提交,完成数据永久地保存)
                                sqlCommand.ExecuteNonQuery();
                                // 利用OracleConnection完成从B地的帐户B中存款100操作
                                using ( OracleConnection oracleConnection = new OracleConnection(oracleConnectionString))
                                {
                                        // 打开 oracleConnection 连接,使 transScope 提升为完全分布式事务,现有多个资源
                                        oracleConnection.Open();
                                        // 创建一个 OracleCommand 对象
                                        OracleCommand oracleCommand = oracleConnection.CreateCommand();
                                        // 将帐户B的余额加上100
                                        oracleCommand.CommandText =
                                                "UPDATE T_Balance SET C_Amount = C_Amount + 100 WHERE C_BankAccounts = 'B'";
                                        // 预执行命令,异常的预判断,处于“挂起”状态(等待事务的提交,完成数据永久地保存)
                                        oracleCommand.ExecuteNonQuery();
                                }
                        }
                        // 事务提交,完成转帐
                        transScope.Complete();
                }
                catch
                {
                        throw new Exception("转帐失败"); // 出现异常,事务自动Rollback()
               
}
        } // using 结束


        OK!如果把这段代码中对两个Connection的操作抽取并封装到数据访问层的类中,把这段代码放在业务逻辑层去访问数据访问层相应的类,这样就可以在业务逻辑层实现.NET事务。

]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
业务、逻辑、数据是应用程序中常见的三架构,也被称为三模型或 MVC 模型。这种架构模式将应用程序分解成三个相互独立的部分,每个部分负责不同的任务和功能,这样可以提高程序的可维护性、可扩展性和可重用性。 1. 业务:负责应用程序的业务逻辑处理,包括数据的校验、业务规则的实现、事务的管理、消息的通信和处理等。业务可以调用逻辑和数据的接口来实现业务功能。 2. 逻辑:负责处理业务逻辑传递过来的数据,并进行加工处理。逻辑可以调用数据的接口来读取或写入数据,并将处理后的数据传递给业务逻辑或表示。 3. 数据:负责应用程序与数据存储系统的交互,包括数据库的连接管理、数据库操作的封装、数据库事务的管理、数据库性能的优化等。数据可以向逻辑业务逻辑提供简单、易用的数据访问接口。 三架构的优点是: 1. 易于维护:将应用程序分成三,每个次都有自己的职责和功能,模块化设计可以更容易地修改、更新和扩展应用程序。 2. 易于重用:每个次都可以被其他应用程序或模块重用,提高了代码的可重用性。 3. 易于测试:三架构分离了不同的职责和功能,可以更容易地对应用程序进行单元测试和集成测试。 总之,业务、逻辑和数据是应用程序中重要的三个次,它们之间通过接口实现了松耦合的关系,实现了代码的高内聚、低耦合的特性,提高了应用程序的可维护性、可扩展性和可重用性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值