对编程很有帮助的三层理论知识及实践

上传人:橙** 文档编号:333364264 上传时间:2022-09-01 格式:PDF 页数:12 大小:1.84MB
返回 下载 相关 举报
对编程很有帮助的三层理论知识及实践_第1页
第1页 / 共12页
对编程很有帮助的三层理论知识及实践_第2页
第2页 / 共12页
对编程很有帮助的三层理论知识及实践_第3页
第3页 / 共12页
对编程很有帮助的三层理论知识及实践_第4页
第4页 / 共12页
对编程很有帮助的三层理论知识及实践_第5页
第5页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《对编程很有帮助的三层理论知识及实践》由会员分享,可在线阅读,更多相关《对编程很有帮助的三层理论知识及实践(12页珍藏版)》请在金锄头文库上搜索。

1、三层理论知识及实践主要讲 8 点内容引人:我们以前些的代码存在的问题:操作数据库的代码和界面代码混合在一起,如数据库发生变化,代码改动大;客户要求更换界面,改动巨大;不利于协作开发。做用户界面的工程师对业务和数据库都必须要熟悉。1、为什么需要三层结构饭店将整个业务分解为三部分来完成,每一部分各负其责,服务员只管接待顾客、向厨师传递顾客的需求;厨师只管烹炒不同口味、不同特色的美食;后勤工作人员只管提供美食原料;他们三者分工合作共同为顾客提供满意的服务。在饭店为顾客提供服务期间,服务员、厨师、后勤工作人员,三者中任何一者的人员发生变化时都不会影响其他俩者的正常工作,只对变化者进行重新调整即可正常营

2、业。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 12 页 -强调服务员、厨师、采购员三者中当任何一者发生变化时都不会影响到其他两者的正常工作,从而引伸出三层结构各层之间的“高内聚,低耦合”特点。比如:电脑。为了解决上述问题:考虑采用分层的方式进行处理。将不同功能的代码放到项目的不同层中。分层的方案很多,其中影响最大也最成熟的就是三层结构。我们用三层结构开发的软件系统于此类似,表示层 只提供软件系统与用户交互的接口;业务逻辑层 是表示层和数据访问层之间的桥梁,负责数据处理和传递;数据访问层 只负责数据的存取工作。从饭店场景引出软件系统中的三层结构模型。名师资料总结-精品资料欢迎

3、下载-名师精心整理-第 2 页,共 12 页 -2、什么是三层结构数据访问层名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 12 页 -实现对数据的保存和读取操作数据访问层 执行从数据库(或其他数据服务)获取数据或向数据库发送数据的功能。写 SQL 语句的地方。“数据访问”层:(1)从“业务逻辑”层接收请求,从“数据服务”获取数据或向其发送数据。(2)使用 SQL 语言或存储过程获取数据,并可选用ADO.NET 向数据库发送数据。(3)将数据库查询结果返回到“业务逻辑”层,作为 ADO.NET 数据集。业务逻辑层是表示层与数据访问层之间的桥梁,负责数据处理、传递。业务逻辑层 包含

4、业务对象本身以及应用于它们的规则。这也是主要业务对象所在的位置。它们实现业务实体或系统对象。系统的业务规则将在这些对象中编码,尽管部分业务规则可能实际上已在数据库的存储过程和触发器中进行了编码。业务逻辑 层:(1)从“用户界面”层接受请求。(2)根据编码的业务规则处理请求。(3)从“数据访问”层获取数据或将数据发送到“数据访问”层。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 12 页 -(4)将处理结果传递回“用户界面”层。用户界面为用户提供一种交互式操作界面用户界面项目是指在应用程序中实现的客户端。用户服务可以是Web 客户端或Windows 客户端,这具体取决于特定的应用

5、程序。例如,在开发Web 应用程序时,可能需要提供具有标准Windows 用户界面或Web 用户界面。通常,这种一般类型的应用程序包含以下功能:用户界面 层:(1)管理Web 页或Windows 界面的呈现和行为 (2)显示数据(3)捕获数据 (4)数据验证检查(5)为用户提供任务指南(6)向“业务逻辑”发送用户输入(7)从“业务逻辑”接收结果(8)向用户显示错误3、三层之间的依赖关系名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 12 页 -4、如何搭建三层结构名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 12 页 -名师资料总结-精品资料欢迎下载-名师精心整理

6、-第 7 页,共 12 页 -5、强调三层关键点三层是指:表示层、业务逻辑层、和数据访问层。表示层:位于最外层(最上层),离用户最近,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作界面。一般由Windows 应用程序或Web 应用服务。业务逻辑层:是表示层和数据访问层之间通信的桥梁。主要负责数据的传递和处理。例如:数据有效性的验证、业务描述相关的功能。通常为类库。数据访问层:主要实现对数据的保存和读取操作。数据访问,包括访问关系数据库、文本文件和 XML 文档等。通常也是类库。三层之间的依赖关系:表示层依赖于业务逻辑层,业务逻辑层依赖于数据访问层。表示层只允许引用业务逻辑层,不允许

7、直接引用数据访问层。各层之间不允许循环引用服务员(表示层)display 厨师(业务逻辑层)business logic layer BLL 采购员(数据访问层)data access layer DAL 演示具体操作(略)6、引人实体类以前读取数据都是用DataSet、DataTable、DataView 作为接受数据的载体。使用DataSet具有某些局限性。(1)DataSet 不具备面向对象的特性,使用不直观、方便;(2)查询数据必须指定索引和列名;(3)其核心结构与数据库的核心结构完全相同,将数据结构完全暴露给表示层和业务逻辑层。基于上述原因:我们需要一种新的传递数据的容器:实体类。实

8、体类是业务对象的基础,它用面向对象的思想为我们消除了关系数据与对象之间的差异。名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 12 页 -7、什么是实体类就是描述一个业务实体的“类”。在应用程序中,就是描述业务所涉及的对象;从数据的存储讲,就是存储在数据库中的表。我们为每一个数据表的字段定义属性,并将这些属性用一个类封装。这样的类就叫实体类。通俗的讲:就是数据库中的一张表对应到程序中的一个类,表中的每一个字段在类中被封装成属性。其作用就是替代DataSet,在三层中作为数据传递的载体。8、三层结构中实体类的使用原则上认为:实体类属于业务逻辑层。为了将应用层次划分的更细,可以将实体

9、类单独放在一个层叫业务实体层。表示层、业务逻辑层和数据访问层都依赖于实体层。因为各层之间数据的传递主要是实体对象。(1)表示层中应用实体类将解析实体对象中封装的数据展示给用户。名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 12 页 -当表示层接受到从业务逻辑层返回的实体对象,并将实体对象中封装的信息展示给用户时,表示层需要对实体对象中封装的信息进行解析。表示层对实体对象的解析分两种情况:一种是对单个实体对象进行解析(每个实体对象中封装的数据对应数据表中的一条记录),通过实体对象的属性获得数据,并赋值给控件的“Text”属性。另一种是对实体对象集合进行解析。通常将多个实体对象封装

10、在List 中称为实体对象集合,对实体对象集合的解析,VS 平台做好了封装,只需要调用相关的属性即可。如:DataGridView、ComboBox 等 都有一个数据源的属性(DataSource)将用户请求的数据封装到实体对象中实例化实体对象,然后将用户请求的数据赋值给实体对象中的对应属性。(2)业务逻辑层中使用实体类主要负责传递实体对象,并对实体对象中封装的数据进行处理。将接收到的实体对象传递到下一层当业务逻辑层接收到装有信息的业务实体对象后,根据请求或响应将实体对象传到下一层。根据用户请求对实体对象中的数据进行处理数据处理有两个方面:一是业务实体本身的数据处理。根据请求的不同可以给属性不

11、同的值;另一方面:业务逻辑对数据的处理。比如:登录,业务逻辑根据用户身份分别进行不同的处理。(3)数据访问层中使用实体类将数据库中的数据封装到实体对象中,或将多个实体对象封装成集合。当用户的请求是数据查询请求时,数据访问层需要实现对数据库的查询访问。当请求的结果只有一条记录时,我们将这条记录封装成一个实体对象。当请求的结果是多条记录时,我们将每一条记录封装成一个实体对象,然后在将多个实体对象封装成集合(List)将实体对象中的数据保存到数据库中。当用户的请求是数据保存、修改、删除请求时,数据访问层首先对实体对象中封装的数据进行解析,然后将解析出的数据保存到数据库中。9、事务处理(扩展/下次课补

12、充)C#执行 Sql 事务处理Public void DoTran /建立连接并打开SqlConnection myConn=GetConn();myConn.Open();SqlCommand=new SqlCommand();/SqlTransaction myTran=new SqlTransaction();/注意:SqlTransaction 没有公开的构造函数SqlTransaction myTran;/通过连接对象,创建一个事务myTran=myConn.BeginTransaction();try 名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 12 页 -/从

13、此开始,基于连接的数据操作都被认为是事务的一部分/下面绑定连接和事务对象myComm.Connection=mConn;myComm.Transaction=myTran;/定位到 pubs 数据库myComm.CommandText=“use pubs”;myComm.ExecuteNonQuery();/更新数据/将所有的计算机类图书myComm.CommandText=“update roysched set royalty=royalty*1.10 where title_id like,pc%?”;myComm.ExecuteNonQuery();/提交事务myTran.Commit

14、();catch Throw new Application(“事务操作出错,系统洗洗脑”);Finally myConn.Close();程序中的事务:通过连接对象SqlConnection 的 BeginTransaction 方法创建SqlTransaction事务对象,然后将该对象分配给SqlCommand 对象的 Transaction 属性,最后通过该对象的Commit 方法提交事务,或Rollback 方法回滚事务。SqlConnection con=new SqlConnection();con.Open();SqlTransaction tran=con.BeginTrans

15、action();SqlCommand cmd=new SqlCommand();/con.CreateCommand();cmd.Connection=con;cmd.Transaction=tran;try cmd.CommandText=”SQL 语句”;cmd.ExecuteNonQuery();cmd.CommandText=”SQL 语句 2”;cmd.ExecuteNonQuery();tran.Commit();名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 12 页 -catch tran.Rollback();CommittableTransaction T

16、ransactionScope 小弟遇到一些麻烦,关于事务处理的,C#中的分布式事务(TransactionScope 类)用起来很简单、方便,直接在业务逻辑层套上一个TransactionScope 就可以,但是需要配置MSDTC,这就给用户带来了不便,因为用户的计算机水平良莠不齐,自己可能不会配置。但是用 SqlTransaction 实现事务就比较麻烦了,因为目前的系统是低耦合的设计,数据访问层的方法都是单一功能的,一系列的、实现业务逻辑的操作都在业务逻辑层,用SqlTransaction 的话就破坏了分层。我苦思冥想,是不是应该把业务逻辑性的方法都返回一个string 型的 SQL 语句,装进一个List 中,然后再用SqlTransaction 实现事务?这样就是稍微有些复杂,各位高手在事务处理上有什么好办法没?使用 TransactionScope 的注意事项使用 2.0的新事务方式也有快一年了,刚开始时候遇到的一些使用疑点问题都在现在的项目中遇到,并解决,现在做一下总结:一、在 TransactionScope中,如果不是必须要避免它启用DTC 分布式事务,因为性能低下;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号