[导读]实现数据访问功能是大多数使用.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 |