常见的数据层程序架构有以下几种:

1. 手写代码
2. Dataset
3. LINQ-to-SQL
4. NHibernate(或者类似的产品)
5. ADO.NET Entity Framework

我们在实现数据层的时候,总是需要大量的创建ADO.NET对象,我们数据表的结构越复杂,表的数据越多,我们需要写的程序越多。能不能让这些简单重复劳动量减少到最低,是我们应该研究的问题。

下面我们来对比一下现有的集中数据层程序架构的优缺点:
1. 手写代码。
手写数据层需要大量的工作量。一般来说,首先需要创建一系列的函数来管理数据库连接、SQL语句的执行等,然后需要继续创建一层来管理业务逻辑,如果需要引入缓存、校验业务逻辑和处理实体的逻辑,那就需要更复杂的代码。
手写数据层的好处是:你拥有最大程序的灵活性和最大程序的控制能力,你用过最大的设计自由,可以很容易的处理某些独特的数据库特性。
但是,手写数据层需要巨大的工作量,而且大部分是简单重复的工作,即使用代码生成工具,工作量也是很大的。
2. 基于Dataset.
Visual studio提供了非常方便的功能,只要用鼠标点击几次就可以实现数据层的功能。Visual Studio产生的类可以访问数据库以及存取Dataset里面的数据。

但是,虽然开始很简单,但是需要复杂逻辑的时候,还是会手写代码,而且这种情况通常是难以避免的。
3. NHibernate数据层。
NHibernate提供了构建高级数据层所需要的所有特性,这种架构可以存取整个数据表的架构并且同时维持数据库对象之间的关系。
使用NHibernate, 存取数据将非常简单,比如要存储一个对象,只需要下面的简单代码:

public void Save(Item item) {
OpenNHibernateSession();
session.Save(item);
CloseNHibernateSession();
}

在NHibernate中,程序员需要做的只是写出实体类,然后告诉NHibernate如何永久化它。

4. 基于LINQ-TO-SQL的数据层。
微软在2007年推出LINQ,它就如同SQL语句,在.NET语言中可以直接实现查询和设置的操作.LINQ的目标是将查询功能集成在编程语言中,通过LINQ的扩展机制,LINQ TO SQL 提供了继承在语言中的数据访问功能,它基于ADO.NET,把表和行映射成类和对象。
LINQ TO SQL利用.NET类上的自定义属性或者XML文档里的信息来处理关系型数据库中对象的永久化,一张数据表可以映射成一个类,表上的列映射成类的属性,表之间的关系可以用类中的属性来表示。LINQ TO SQL自动跟踪对象的变化,然后通过动态SQL语句或者存储过程来更新数据库。所以,使用LINQ-TO-SQL,大部分情况下不需要程序员自己提供SQL语句或者存储过程。
与NHibernate相比,LINQ-TO-SQL有着明显的不足。比如,类和表之间的映射是严格的一对一关系,而且不能将基类的属性和数据表的列进行映射。另外LINQ-TO-SQL是专门为SQL Server数据库设计的,尽管程序员可以在LINQ中自己设计一个自定义的Provider.

5. ADO.NET Entity Framework
Microsoft ADO.NET Entity Framework在.NET 3.5中引入,目的是为了提供一个类似于NHibernate的永久化方案,而且有微软这个商业化公司的支持。但是目前,ADO.NET Entity Framework还处于研发阶段,很多功能并不完善。

 

版权声明:本文原创发表于 博客园,作者为 今夜太冷
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

posted on 2011-05-02 18:38  今夜太冷  阅读(658)  评论(2编辑  收藏  举报