`
justdoithz
  • 浏览: 48695 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

【转】三层架构的业务逻辑层存在的意义

阅读更多

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

这只是其中的一个问题。当我遇到要同时操作几个表的时候,要用到事务处理,对操作失败的数据要进行回滚,如果把事务的逻辑放在数据访问层来做,同样会带来代码的复杂性,给后期维护带来不便。为此,我一直把事务处理放在存储过程中来处理。像我的项目一直使用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事务。

分享到:
评论

相关推荐

    什么是三层架构_表现层/业务逻辑层/数据访问层

    三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。

    三层架构(表现层、业务逻辑层、数据访问层)

    目录 1三层结构原理 2各层的作用 3区分方法 ? 表示层 ? 业务逻辑层 ? 数据层 4规则 5优缺点 ? 优点 ? 缺点 6与MVC的区别

    三层架构及设计模式(抽象工厂实现)

    三层架构实现,把表现层(WebUI)与数据访问层(DAL)分开,使用业务逻辑进行处理(BLL), 避免了把数据信息暴露在表现层, 从而提供了程序的性能,使用业务逻辑处理与表现层进行交互, 把表现层的需求,通过...

    JavaWeb三层架构和五层架构介绍

    开发业务应用角度对程序的划分,其分层逻辑来源于“高内聚低耦合”的思想,在开发中针对这种有三层架构和五层架构

    asp.net MVC三层架构

    Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。 通常模型对象负责在数据库中存取数据。 View(视图)是应用程序中处理数据显示的部分。...这个适合刚接触三层架构的来学习,比较简单。

    C#三层架构与工厂模式的区别与联系

    单层的管理中,已实现数据库的连接、命令的执行、不同数据集的应用。实现一个管理信息系统所需的技术,似乎已齐全了。 但是,如果应用程序的功能需求不是这么简单,而是有非常复杂的流程...关键字:三层架构、工厂模式

    jsp三层架构

    jsp三层架构系统分析与展示,页面层,业务逻辑层,数据访问层等详解

    工厂模式三层架构增删改查分页(BLL层使用事务)源码

    本软件是一个工厂模式三层架构例子程序(★特点与难点是在BLL层使用数据库事务,而不在DAL层使用数据库事务)。程序通过WinForm应用程序实现Sql Server 2005,Sqlite 3的增、删、改、查,分页功能。是学习三层架构、...

    C# 三层架构入门

    一提三层架构,大家都知道是表现层(UI),业务逻辑层(BLL)和数据访问层(DAL),而且每层如何细分也都有很多的方法。但具体代码怎么写,到底那些文件算在哪一层,却是模模糊糊的。下面用一个简单的例子来带领大家...

    基于JAVA struts+hibernate实现的网络购物系统的毕业设计,该系统采用MVC三层架构,分离了表现层、业务逻辑层和

    该系统采用了三层架构,分别是表现层、业务逻辑层和数据持久层。 表现层使用Struts框架,通过MVC模式实现用户与系统的交互,主要包含商品展示、购物车、下单、支付等功能模块。其中商品展示模块查询商品信息并展示在...

    C#三层架构经典源代码

    三层架构(3-tier application) 一个三层架构的应用程序由三部分组成,这三部分各自分布在网络中的不同地方。这三个部分分别是:工作站或表示层接口、事务逻辑、数据库以及与其相关的程序设计。 在一个典型的...

    C#语言的三层架构教程-含示例代码

    在项目开发的过程中,有时把整个项目分为三层架构,其中包括:表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。三层的作用分别如下: 表示层:为用户提供交互操作界面,这一点不论是对于Web还是WinForm都是如此,...

    软件三层架构实例(登录)

    三层架构:显示层,业务逻辑层,数据访问层。本程序严格按照这三层分割,很好很到位的体现了三层架构。能帮助大家对三层架构有个清晰的了解。

    三层构架三层构架三层构架三层构架

    三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架...

    三层架构思想

    对表现层、业务逻辑层、数据访问层的深入诠释

    asp.net三层架构简单部署

    asp.net三层架构简单部署,数据层。业务逻辑层,界面层(UI层)

    code smith三层架构模板

    code smith 三层架构 模板 可以生成数据访问层,业务逻辑层,实例层,以及工厂的代码,您只需运行run.cst即可。

    ClothesShop简单三层架构.zip

    服装商店,基于ASP.NET简单三层架构,使用vs2008及内置SQL server数据库,实现了主页,登录,注册,注销,衣服列表,对商品的增删改查。使用了ASP.NET Web Service、JavaScript、Ajax等技术对前端页面进行了优化。...

    三层开发案例

    三层架构通常意义上的三层架构就是将整个业务应用划分为:界面层、业务逻辑层、数据访问层。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软...

    三层架构详细讲解.doc

    软件系统最常用的一般会讲到三层架构,其实就是将整个业务应用划分为表示层、业务逻辑层、数据访问层等……

Global site tag (gtag.js) - Google Analytics