知识大全 ADO.NET实现应用程序数据访问层

Posted

篇首语:坚硬的城市里没有柔软的爱情,生活不是林黛玉,不会因为忧伤而风情万种。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ADO.NET实现应用程序数据访问层相关的知识,希望对你有一定的参考价值。

ADO.NET实现应用程序数据访问层  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  实现数据访问功能是大多数使用 NET Framework的开发人员的核心工作 并且由他们生成的数据访问层是其应用程序必不可少的组成部分 本文概述了五个建议 希望您在使用Visual Studio NET和 NET Framework生成数据访问层时予以考虑 这些技巧包括通过使用基类来利用面向对象的技术和 NET Framework基础结构 通过遵循某些准则使类变得易于继承 以及在就表示方法和外部接口进行决策之前仔细分析自己的需要     如果您要针对Microsoft NET Framework来开发以数据为中心的应用程序 那么您终将需要创建数据访问层(DAL) 您可能知道在 NET Framework中生成代码带来的一些好处 因为它同时支持实现和接口继承 所以您的代码可以具有更高的可重用性 尤其是可供您的组织中那些使用与Framework兼容的其他编程语言的开发人员重用 在本文中 我将介绍为了针对基于 NET Framework的应用程序而开发DAL的五个规则 在开始之前 我要说明的是 基于本文中讨论的规则生成的任何DAL都将与Windows平台上的开发人员所喜爱的传统的多层或N层应用程序兼容 在该体系结构中 表示层由对协调数据访问层工作的业务层进行调用的Web窗体 Windows窗体或XML Web Service代码组成 该层包含多个数据访问类 另外 在不需要进行业务处理协调的情况下 表示层可能会直接对DAL进行调用 该体系结构是传统的模型 视图 控制器(MVC)模式的变体 并且在许多方面由Visual Studio NET及其公开的控件所采用      规则 使用面向对象的功能    最基础的面向对象的任务是使用继承的实现来创建抽象基类 该基类可以包含所有数据访问类可以通过继承使用的服务 如果这些服务足够通用 则可以通过在整个组织中分发基类来对它们进行重用 例如 在最简单的情况下 基类可以为派生类完成连接对象的创建 如图 所示     Imports System Data SqlClient    Namespace ACME Data    Public MustInherit Class DALBase : Implements IDisposable    Private _connection As SqlConnection    Protected Sub New(ByVal connect As String)  _connection = New SqlConnection(connect)  End Sub    Protected ReadOnly Property Connection() As SqlConnection  Get  Return _connection  End Get  End Property    Public Sub Dispose() Implements IDisposable Dispose  _connection Dispose()  End Sub    End Class    End Namespace    正如您在该图中看到的那样 DALBase类被标记为MustInherit(在C#中为abstract) 以确保它用于继承关系 该类随后会包含一个在公共构造函数(它接受连接字符串作为参数)中实例化的私有SqlConnection对象 然后 受保护的Connection属性允许派生类访问该连接对象 而IDisposable接口中的Dispose方法则确保该连接对象得以被处理 即使是在下面这个简化的示例中 您也可以从中注意到抽象基类的用处     Public Class WebData : Inherits DALBase  Public Sub New()  MyBase New(ConfigurationSettings AppSettings( ConnectString ))  End Sub    Public Function GetOrders() As DataSet  Dim da As New SqlDataAdapter( usp_GetOrders Me Connection)  da SelectCommand CommandType = CommandType StoredProcedure  Dim ds As New DataSet()  da Fill(ds)  Return ds  End Function  End Class    在该示例中 WebData类继承自DALBase 因此它不需要考虑实例化SqlConnection对象的问题 而只需通过MyBase关键字(或C#中的base关键字)将连接字符串传递给基类 WebData类的GetOrders方法可以使用Me Connection(在C#中为this Connection)访问受保护的属性 尽管该示例相对简单 但如果您看了规则 和规则 的话 就会发现该基类还可以提供其他服务     当DAL需要在+环境中运行时 抽象基类尤其有用 在这种情况下 因为允许组件使用+所需的代码更为复杂 所以创建一个如图 中所示的服务组件基类是有意义的     <ConstructionEnabled(True) _  Transaction(TransactionOption Supported) _  EventTrackingEnabled(True)> _  Public MustInherit Class DALServicedBase : Inherits ServicedComponent    Private _connection As SqlConnection    Protected Overrides Sub Construct(ByVal s As String)  _connection = New SqlConnection(s)  End Sub    Protected ReadOnly Property Connection() As SqlConnection  Get  Return _connection  End Get  End Property    End Class    在该代码中 DALServicedBase类基本上包含了与图 中相同的功能 但是它另外继承了System EnterpriseServices命名空间中的ServicedComponent 并且包含了一些属性以指明该组件支持对象结构 事务和统计信息跟踪 然后 该基类负责捕捉在组件服务管理器中配置的结构字符串 并再一次创建和公开SqlConnection对象 需要注意的是 当一个类从DALServicedBase继承时 它还将继承属性的设置 换句话说 派生类也会将它的事务选项设置为Supported 如果该派生类想要重写该行为 则它可以在类级别重新定义该属性 此外 派生类还应该在适当位置对自身利用重载方法和共享方法 主要有两种使用重载方法(具有多个签名的单个方法)的情况 第一 当方法需要接收改变其类型的参数时 可以使用它们 在Framework中 这一类型的典型示例是System Convert类的方法 例如 ToString方法包括 个接收一个参数的重载方法 每个方法都具有不同的类型 第二 重载方法可以用来公开参数数量不断增加(但不一定是不同类型的参数)的签名 这种类型的重载证明在DAL中非常有效 因为可以使用它来公开用于数据检索和修改的备用签名 例如 可以重载GetOrders方法以便一个签名不接收任何参数并返回所有订单 而另一个签名则接收一个表明调用方只打算检索特定客户订单的参数 如下面的代码所示     Public Overloads Function GetOrders() As DataSet  Public Overloads Function GetOrders(ByVal customerId As Integer) As DataSet    在这种情况下 良好的实现技巧是将GetOrders方法的功能抽象到一个可以由每个重载签名调用的私有或受保护的方法中 还可以使用共享方法(在C#中为static方法)来展开可供数据访问类的所有实例访问的字段 属性和方法 尽管不能将共享成员与使用组件服务的类结合使用 但是对于可以在数据访问类的共享构造函数中检索然后被所有实例读取的只读数据来说 它们可能十分有用 在对读/写数据使用共享成员时要特别小心 这是因为多个执行线程可能会竞争使用对共享数据的访问权      规则 遵守设计准则    在Visual Studio NET随附的联机文档中 有一个标题为 Design Guidelines for Class Library Developers 的主题 它不仅论述您应该遵循的重载成员 构造函数和事件的模式 而且还讨论了类 属性和方法的命名约定 您应该遵守命名约定的主要原因之一是 NET Framework提供的交叉语言继承 如果您要在Visual Basic NET中生成一个DAL基类 则您需要确保那些使用与 NET Framework兼容的其他语言的开发人员可以从它继承 并能容易地理解它的工作方式 按照我概述过的准则去做 那么您的命名约定和结构将不会是特定于语言的了 举个例子 您会在本文的代码示例中注意到 Camel大小写风格(首个单词小写 并夹杂大写字母)用于方法的参数 Pascal大小写风格(每个单词都大写)用于方法 而基类则具有Base后缀以表示它是一个抽象类 NET Framework设计准则的必然结果是常规设计模式 就像Gang of Four撰写的Design Patterns(Addison Wesley )中所介绍的那些设计模式一样 例如 NET Framework使用了Observer模式的一个名为Event模式的变体(您在类中公开事件时应当遵循该模式)      规则 利用基础结构     NET Framework包含一些可以帮助处理与基础结构相关的一般性任务(例如 检测和异常处理)的类和结构 通过基类将这些概念与继承相结合可能十分有用 例如 请考虑在System Diagnostics命名空间中公开的跟踪功能 除了Trace和Debug类 该命名空间还包括从Switch和TraceListener派生的类 Switch类—BooleanSwitch和TraceSwitch 可以通过编程方式以及通过应用程序的配置文件而被配置为打开和关闭 就TraceSwitch而言 可以公开多个级别的跟踪 TraceListener类—TextWriterTraceListener和EventLogTraceListener将Trace和Debug方法的输出分别定向到文本文件和事件日志 因此 您可以将跟踪功能添加到基类中 以便派生类可以轻松地记录消息 继而 应用程序可以使用应用程序配置文件来控制是否启用跟踪 您可以通过包含一个BooleanSwitch类型的私有变量并在构造函数中将其实例化 以将该功能添加到图 所示的DALBase类中     Public Sub New(ByVal connect As String)  _connection = New SqlConnection(connect)  _dalSwitch = New BooleanSwitch( DAL Data Access Code )  End Sub    BooleanSwitch的参数包括它的名称和说明 您随后可以添加一个受保护属性 以便将开关打开和关闭 并添加另一个受保护属性 以便使用Trace对象的WriteLineIf方法来格式化和写入跟踪消息     Protected Property TracingEnabled() As Boolean  Get  Ret cha138/Article/program/net/201311/12919

相关参考

知识大全 数据访问与ADO.NET

数据访问与ADO.NET  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!ADONET的设计目标  A

知识大全 ado.net快速上手实践篇(二)

五dal层数据访问实现   在这里我们使用前一篇文章里实现的数据持久化层和伪SqlMapper对象实现数据操作下面我们来看看Dal下核心的Dao如何实现 &nb

知识大全 ADO.NET连接方式进行数据访问学习笔记

ADO.NET连接方式进行数据访问学习笔记  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Ado.net访问数据库的方法和步骤

Ado.net访问数据库的方法和步骤  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 剖析 ADO.NET 批处理更新(深入研究数据访问)

剖析ADO.NET批处理更新(深入研究数据访问)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 在 ADO.NET2.0 中对于从您的数据源访问元数据

在ADO.NET2.0中对于从您的数据源访问元数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 ado.net 如何读取 excel

   经常需要在数据库与Execl之间互导数据net时代ADONET可以使用使用MicrosoftJetOleDb访问访问Excel网上已经有很多类似的资源最典型也是最简

知识大全 使用ADO.NET设计数据库应用程序

使用ADO.NET设计数据库应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  认识ADO和

知识大全 用C#对ADO.NET数据库完成简单操作

用C#对ADO.NET数据库完成简单操作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!数据库访问是

知识大全 设计.NET应用程序数据访问层五大原则

设计.NET应用程序数据访问层五大原则  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要大多数