工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 微软开发专栏 > 技术专题 > 正文
ADO.NET实现应用程序数据访问层
[文章信息]
作者:Dan Fox
时间:2005-03-16
出处:MSDN
责任编辑:方舟
[文章导读]
实现数据访问功能是大多数使用.NET Framework的开发人员的核心工作
advertisement
热点推荐
· Easy Go Back帮你用好鼠标手势
· 3月15日软件精选 欣赏优美的代码
· Word窗口主要元素的显示和隐藏
· 提高Windows内存效率的几种方法
· 完美的C++:C++/CLI
[正文]

1 2 3 4  下一页

  [导读]实现数据访问功能是大多数使用.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及其公开的控件所采用。

  规则1:使用面向对象的功能

  最基础的面向对象的任务是使用继承的实现来创建抽象基类,该基类可以包含所有数据访问类可以通过继承使用的服务。如果这些服务足够通用,则可以通过在整个组织中分发基类来对它们进行重用。例如,在最简单的情况下,基类可以为派生类完成连接对象的创建,如图1所示。

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
                 图1 简单的基类

  正如您在该图中看到的那样,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)访问受保护的属性。尽管该示例相对简单,但如果您看了规则2和规则3的话,就会发现该基类还可以提供其他服务。

  当DAL需要在COM+环境中运行时,抽象基类尤其有用。在这种情况下,因为允许组件使用COM+所需的代码更为复杂,所以创建一个如图2中所示的服务组件基类是有意义的。

<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
                     图2 服务组件基类

  在该代码中,DALServicedBase类基本上包含了与图1中相同的功能,但是它另外继承了System.EnterpriseServices命名空间中的ServicedComponent,并且包含了一些属性以指明该组件支持对象结构、事务和统计信息跟踪。然后,该基类负责捕捉在组件服务管理器中配置的结构字符串,并再一次创建和公开SqlConnection对象。需要注意的是,当一个类从DALServicedBase继承时,它还将继承属性的设置。换句话说,派生类也会将它的事务选项设置为Supported。如果该派生类想要重写该行为,则它可以在类级别重新定义该属性。此外,派生类还应该在适当位置对自身利用重载方法和共享方法。主要有两种使用重载方法(具有多个签名的单个方法)的情况。第一,当方法需要接收改变其类型的参数时,可以使用它们。在Framework中,这一类型的典型示例是System.Convert类的方法。例如,ToString方法包括18个接收一个参数的重载方法,每个方法都具有不同的类型。第二,重载方法可以用来公开参数数量不断增加(但不一定是不同类型的参数)的签名。这种类型的重载证明在DAL中非常有效,因为可以使用它来公开用于数据检索和修改的备用签名。例如,可以重载GetOrders方法以便一个签名不接收任何参数并返回所有订单,而另一个签名则接收一个表明调用方只打算检索特定客户订单的参数,如下面的代码所示:

Public Overloads Function GetOrders() As DataSet
Public Overloads Function GetOrders(ByVal customerId As Integer) As DataSet

  在这种情况下,良好的实现技巧是将GetOrders方法的功能抽象到一个可以由每个重载签名调用的私有或受保护的方法中。还可以使用共享方法(在C#中为static方法)来展开可供数据访问类的所有实例访问的字段、属性和方法。尽管不能将共享成员与使用组件服务的类结合使用,但是对于可以在数据访问类的共享构造函数中检索然后被所有实例读取的只读数据来说,它们可能十分有用。在对读/写数据使用共享成员时要特别小心,这是因为多个执行线程可能会竞争使用对共享数据的访问权。


1 2 3 4  下一页

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • ADO.NET2.0的十大新特性
  • 使用ADO.NET的最佳实践
  • ADO.NET实用技巧两则
  • DataSet的数据并发异常处理
  • 使用ADO.NET设计数据库应用程序
  • 3家搜索引擎集体诉讼8848 吕春维未敢出席
  • 杨元庆:没有准备不会获批的备用方案
  • 【315】华硕笔记本电脑漏电 存在设计缺陷
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • Advertisement

    天极无线
    经典名曲 华语流行 欧美风情 人声音效 原声大碟
    你好周杰伦-安又琪
    直线-张韶涵
    天边-张韶涵
    看我72变-蔡依林
    乱世佳人-Twins
    全世界下雨-张娜拉
    我们的爱-飞儿乐队
    分手快乐-梁静茹
    爱在西元前-周杰伦
    三万英尺-迪克牛仔
    爱如潮水-张信哲
    爱情宣言-齐秦
    寻找玛依拉-刀郎
    驼铃-刀郎
    老鼠爱大米-杨臣刚
    功夫主题曲
    仙剑主题曲杀破狼
    天下无贼片尾曲
    冲动的惩罚-刀郎
    情人-刀郎
    爱情-莫文蔚
    挪威的森林-伍佰
    奔跑 - 羽泉
    因为爱 - 羽泉
      ·时尚女人圈
    ·经典影视专集
    ·美女秀场
    ·美丽大自然专题
    ·流行金曲
    ·科幻电影特区
    | 最新推荐
    ·你好周杰伦
    ·杀破狼
    ·寻找玛依拉
    ·孤单公园
    ·男人海洋
    | 魔术铃声
    ·少女丰胸
    ·少妇丰胸
    ·减肥魔铃
    ·增高魔铃
    ·美容魔铃

    今日报价查询 更多报价