VS2005数据存取层深入剖析之基础篇
日期:2007年6月10日 作者: 查看:[大字体 中字体 小字体]-
摘要 本文试图对Visual Studio 2005自动生成的数据存取层(DAL)作深入分析,最终达到在此基础上进一步编辑和扩展此代码之目的。
一. 引言
Visual Studio 2005提出了“用更少的代价实现更高的性能”的口号。Visual Studio 2005中提供了大量的向导—特别是在生成数据存取代码方面;这些向导大大减少了代码的编写量。请注意,自动添加到你的工程中的任何代码都遵循了某种严格的逻辑和良好的设计模式。因此,全面理解Visual Studio 2005在这方面的工作原理有助于你以后进一步修改和扩展这些代码从而构建你自己的定制的数据存取层。本文将对表格适配器和绑定源组件相应的代码展开深入的分析。
自从微软发行.NET框架2.0、Visual Studio 2005和ASP.NET 2.0以来,其关键卖点之一在于,同样的工作如今你只需要编写更少的代码,并且常常不需要任何编码。
简言之,“no-code-at-all”的口号其实是大量存在的向导、插件与设计器—你可以通过鼠标拖动、复选框和按钮交互方式在其中进行编程。只要对你想实现的内容加以“声明”,那么微软的工具会针对你提出的要求生成相应的代码。你可能还记得那名老口号“所见即所得”—正是在这种口号倡导下产生了如Visual Basic这样的快速原型开发工具。我想,现在我们可以把这个口号再改一下,那就是“所得即工具所想”(what-you-get-is-what-the-tool-thinks-you-want)。
事实上,在Visual Studio 2005中,你会发现存在大量的Windows表单和ASP.NET数据控件用于连接到中间层对象以便迅速而高效地创建数据驱动的应用程序。
基于最新的Visual Studio 2005数据设计器,你可以通过用户驱动的向导来创建代码。然而,在你点击“Finish”按钮后得到的代码中往往包含了比以前版本的Visual Studio中更多的抽象。在此基础上,虽然你只需使用例如表格适配器和类型化的数据集等顶层对象,但是你最终得到的却是一个“瘦”的更好的中间层。而且,更重要的是,你可以选择把这个顶层API连接到你自己的数据存取层,从而完成一个正规化多层系统。
我的建议是:在任何情况下,你都应该避免把大量的ADO.NET相关的表单代码插入到ASP.NET页面和Windows表单事件的code-behind中。你应该总是坚持使用分层设计,并使用数据传输模式和有效的数据描述方式。但是,Visual Studio能够提供数据集并自动生成ADO.NET代码。另外,如今的Visual Studio 2005还能够为你提供数据集和定制对象并能自动生成一个能够进行大幅度定制的抽象层。
在本文中,我将从面向对象设计的角度来分析和讨论Visual Studio 2005数据设计器生成的代码。
二. 构建一个数据驱动的Windows表单
让我们一步步来创建一个数据驱动的Windows表单应用程序。我们的总体想法是构建一个基于表单的应用程序,它能够显示并编辑来自于Northwind数据库多个表格的数据。图1显示了最终的应用程序运行情况。

图1.本文示例程序的最终显示结果。
这个表单上有一些数据绑定控件,还有几个数据连接器控件。典型情况下,你首先要添加BindingNavigator控件以便让用户在一个绑定数据源记录中进行导航。这个BindingNavigator控件有一个类似于VCR的用户接口,它仅负责从数据源选择一个特定的记录并使之可应用于一个通用的编程接口。这个BindingNavigator控件提供的用户接口很容易使人联想到Microsoft Access中的工具栏。
在Windows Form 2.0中,大多数控件不直接绑定到一个集合对象,而是使用一个中间对象—绑定源—该绑定源被绑定到一个典型的可枚举的数据源对象上。注意,这个BindingNavigator控件不会抛出任何异常。
绑定源组件的设计目的主要是为了简化表单上的控件和绑定数据之间的绑定。另外,它还提供了许多其它类型的服务(如当前状态管理,改变通知,过滤等)。如前面所提及,一个绑定源组件其实是在用户接口元素和后端数据之间添加了一个间接层,如图2所示。

图2.绑定源组件介于用户接口和数据源之间。
你需要把该绑定源组件连接到一个物理数据源,然后把表单上的控件绑定到该绑定源。从现在开始,任何与数据源相关的数据交互都是通过这个绑定源实现的。典型的操作包括导航、检索、排序、过滤和更新。
其实,.NET框架2.0中的一个绑定源组件是一个派生自类BindingSource的类的实例。注意,尽管这个术语比较新一些并且特定于.NET框架2.0;但是,绑定源组件“背后”的核心概念对于一位.NET Windows开发老手来说应该不陌生。
是的,这种绑定源组件其实就是一个没有用户界面的组件,专门设计用于让开发者从Visual Studio 2005内部管理绑定对象,并且多数是以声明方式实现的。 三. BindingSource类
BindingSource类负责包装一个数据源并通过它自己的对象模型来暴露该数据源。表格1列出了BindingSource基类的主要属性。
表格1.BindingSource类的编程接口。
属性 描述 AllowEdit 指示是否能够编辑在底层数据源中的项。 AllowNew 指示是否该新项能够被添加到底层数据源。 AllowRemove 指示是否能够从底层数据源中删除这些项。 Count 从底层数据源中取得的项的数目。 CurrencyManager 取得一个对相关联的当前状态管理器的引用。 Current 取得底层数据源中的当前项。 DataMember 指示数据源中的一个特定的列表。 DataSource 指示连接器绑定的数据源。 Filter 用于过滤数据源的表达式。 IsReadOnly 指示是否底层数据源是只读的。 IsSorted 指示是否底层数据源中的该项已经被排序。 Item 检索相应于指定索引的数据源项。 List 取得连接器被绑定到的列表。 Position 指示底层数据源中当前项的索引。 Sort 指示用于排序的列名以及排序的顺序。 SortDirection 指示在数据源中排序项的方法。 SortProperty 取得用于排序数据源的PropertyDescriptor对象。 SupportsAdvancedSorting 指示是否数据源支持多栏排序。 SupportsChangeNotification 指示是否数据源支持改变通知。 SupportsFiltering 指示是否数据源支持过滤。 SupportsSearching 指示是否数据源支持搜索。 SupportsSorting 指示是否数据源支持排序。
值得注意的是,BindingSource对象的设计目的是既用来管理简单的数据绑定也应用于复杂的数据绑定场所—这意味着,它合并了.NET框架1.x中CurrencyManager和PropertyManager的所有功能。基于此,我们应该注意到,表格1中的基本数据源经常指一个集合(例如,一个类型化的数据集),但也可以是单个的对象(例如,一个独立的DataRow)。
从表格1中的属性可见,绑定源组件拥有一个Position成员,它用于指示当前选择的数据项的索引。该BindingSource类并没有提供任何用户接口,因此这里所谓的“选择”纯粹是从逻辑上讲的。由绑定控件负责把逻辑选择转换成对用户可见而且有意义的一些内容。Current属性指向在当前选择位置检索到的数据。该BindingSource类还暴露一些方法用于实现前后移动选择内容或跳转到一个特定的位置;还有一个事件,用于指示当前选择的元素已经发生改变。
为了实现这些功能并且使它们快速而容易地出现在用户接口级,你可以使用BindingNavigator控件并且把它关联到一个绑定源上。每当用户点击图1中类似于VCR的按钮,绑定源上的Position和Current属性被更新并且激发CurrentChanged事件。就象在WindowsForms 1.x时期的数据绑定一样,监听这些事件的控件接收通知并且能够适当更新各自的用户接口。下面,让我们继续讨论Visual Studio 2005中数据源的定义问题。 - [1] [2] [3] [4] 下一页
-
- VS2005数据存取层深入剖析之基础篇 相关文章:
- ·VS2005数据存取层深入剖析之基础篇
- VS2005数据存取层深入剖析之基础篇 相关软件
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
下一篇:洪水攻击原理及代码实现全攻略
精品推荐
热点TOP10
- ·UML业务建模实例分析
- ·GIF文件格式
- ·代码静态分析工具PC-LINT安装配置
- ·游戏外挂设计技术探讨
- ·开发WDM型的USB设备驱动程序
- ·设计模式探索系列之Bridge模式
- ·逆向思维 《魔兽世界》封包分析
- ·LZW压缩算法简介
- ·Solaris 10 安装及SVC管理及X及Vmware及其它可能遇到的一些问题
- ·1.2 什么是数据挖掘
- ·Spring让LOB数据操作变得简单易行
- ·编写QQ外挂插件的原理和方法
- ·使用BHO定制你的IE浏览器
- ·利用API在Windows下创建进程和线程
- ·在内存中修改数据的网游外挂
- ·程序语言效率比较
- ·正则表达式从入门到精通
- ·网络监听技术概览
- ·游戏开发新手入门之跟踪窗口和使用GDI
- ·原始套接字透析之实现Ping
