科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件ADO.NET实现应用程序数据访问层

ADO.NET实现应用程序数据访问层

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

实现数据访问功能是大多数使用.NET Framework的开发人员的核心工作

作者:Dan Fox 来源:MSDN 2007年11月4日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
规则2:遵守设计准则

  在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, 1995)中所介绍的那些设计模式一样。例如,.NET Framework使用了Observer模式的一个名为Event模式的变体(您在类中公开事件时应当遵循该模式)。

  规则3:利用基础结构

  .NET Framework包含一些可以帮助处理与基础结构相关的一般性任务(例如,检测和异常处理)的类和结构,通过基类将这些概念与继承相结合可能十分有用。例如,请考虑在System.Diagnostics命名空间中公开的跟踪功能。除了Trace和Debug类,该命名空间还包括从Switch和TraceListener派生的类。Switch类—BooleanSwitch和TraceSwitch,可以通过编程方式以及通过应用程序的配置文件而被配置为打开和关闭。就TraceSwitch而言,可以公开多个级别的跟踪。TraceListener类—TextWriterTraceListener和EventLogTraceListener将Trace和Debug方法的输出分别定向到文本文件和事件日志。因此,您可以将跟踪功能添加到基类中,以便派生类可以轻松地记录消息。继而,应用程序可以使用应用程序配置文件来控制是否启用跟踪。您可以通过包含一个BooleanSwitch类型的私有变量并在构造函数中将其实例化,以将该功能添加到图1所示的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
  Return _dalSwitch.Enabled
 End Get
 Set(ByVal Value As Boolean)
  _dalSwitch.Enabled = Value
 End Set
End Property

Protected Sub WriteTrace(ByVal message As String)
 Trace.WriteLineIf(Me.TracingEnabled, Now & ": " & message)
End Sub

  这样,派生类无须自己了解开关类和侦听器类,就可以在数据访问类中发生重大事件时轻松地调用WriteTrace方法。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<switches>
<add name="DAL" value="1" />
</switches>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="DALLog.txt"/>
</listeners>
</trace>
</system.diagnostics>
</configuration>
                    图3 跟踪配置

  要创建侦听器并将其打开,还可以使用应用程序配置文件。图3显示了一个简单的配置文件,它打开刚刚显示的DAL开关,并通过名为myListener的TextWriterTraceListener将它的输出定向到DALLog.txt文件。当然,您还可以通过从TraceListener类派生并将侦听器直接包含在DAL中,来通过编程方式创建自己的侦听器。

Public Class DALException : Inherits ApplicationException

 Public Sub New()
  MyBase.New()
 End Sub

 Public Sub New(ByVal message As String)
  MyBase.New(message)
 End Sub

 Public Sub New(ByVal message As String, ByVal innerException As Exception)
  MyBase.New(message, innerException)
 End Sub

 ' Add custom members here
 Public ConnectString As String
End Class
                      图4 自定义异常类

  毫无疑问,您应该利用的另一个基础结构是结构化异常处理(SEH)。在最基本的级别,DAL可以公开它自己从System.ApplicationException继承的Exception对象,并且还可以公开自定义成员。例如,图4中所示的DALException对象可以用来包装由数据访问类中的代码引发的异常。然后,基类可以公开一个受保护的方法以包装异常、填充自定义成员并将其传回调用方,如下所示:

Protected Sub ThrowDALException(ByVal message As String, _
ByVal innerException As Exception)

Dim newMine As New DALException(message, innerException)

newMine.ConnectString = Me.Connection.ConnectionString
Me.WriteTrace(message & "{" & innerException.Message & "}")
Throw newMine
End Sub

  这样,派生类可以轻松地调用受保护的方法,传入所截获的特定于数据的异常(通常为SqlException或OleDbException),并添加一个与特定数据域有关的消息。基类在DALException中包装该异常,并将其传回调用方。这使得调用方可以使用单个Catch语句轻松地捕获来自DAL的所有异常。有关信息,请参阅MSDN上发布的 《Exception Management Application Block Overview》一文(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/emab-rm.asp)。该框架通过一组对象将异常的发布与应用程序日志耦合在一起。实际上,您可以通过从.NET Framework提供的BaseApplicationException类继承自己的自定义异常类,来将它们插入到该框架中。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章