小小飞鹰

     中国人缺少的是步骤,太急。练太极!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

架构开篇:ORM概念

Posted on 2007-01-31 11:04  小小飞鹰  阅读(959)  评论(0编辑  收藏  举报

:

     一个框架的搭建,特别是好的框架的搭建,对数据持久层的要求非常高;参考各种框架后,总结目前流行的持久层,个人认为ORM将是未来发展的一种趋势,本篇参考网上众多高人列出了ORM概念,特点,及优缺点;

ORM的出现背景:

软件开发中OO思想对于我们发开的意义(把现实的物体变成程序里面抽象的对象(类),让我们的开发可以变成一种对现实社会的模拟。通过这个模拟,代码不再无聊,对象让他变得优美起来。各类对象让我们的软件变得丰富多彩)。但是对数据库我们去无能为力,他只是一个二维网格,这就是他唯一的一个结构。怎么才能让这个没有情调的东西适应或者“伪”适应我们这个优美的OO呢?

ORM的出现,比较巧妙的解决了这个问题。他把Table应设成一个类,把一条数据应设成这个类的一个实例。反过来,把这些实例再度转换成数据行,操作到数据库。

数据库ß->ObjectSpaceNameSpace

数据表ß->Class

数据行ß->Instance (object)

数据列ß->属性

数据操作ßà类的方法

面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

ORM的特点

    通过这个映射之后,我们得到了一个什么样的结果。数据表成了一个个我们熟悉的对象,我们完全可以这样理解我们的模型。

ObjectSet users=Space.GetObjectSet<User>(userId>100);

(users[2] as User).Name=xxx;

users.Persit();

从这里看,我们不再关心什么数据行列了,只是对于对象的操作就可以。

ORM的优点

  1 模型化数据表,使逻辑更清晰,容易理解。

这个优点就是刚开始提到的那一个,把二维的数据表映射成对象,这样的开发看起来要清晰一些,比起全都是行列来。

  2 快速开发。

对于数据库常用的操 ,创建、修改、删除都可以使用ORM方便的来操作。对比这两段代码:

  string sql=update T1 set (xx=xxx,xxxx=xxxxx);

 

  T1.Xx=XXX

  T1.XXX=XXXX

  T1.Persit()

如果字段表比较少,还看不出区别,如果字段有几十个,那么用字符串就显得很麻烦,并且还容易写错。而如果使用了ORM,至少类的属性可以地动提示了,出错的机会少,并且代码看起来漂亮多了,易读易维护。

对于取数据集操作,ORM就力不从心了。它可取出一个表的数据,但是在数据表连接,取得特定字段等方便就显得很弱。更不用说一些复杂sql的执行了。

ORM的不足

  1 取数据的灵活性

比方说:多表连接。这一个在orm里面就无法实现(很难实现)。而这个有非常常用,特别是在作统计的时候。

比方说:取出的垃圾数据(只想取得某一列,但是orm是取出全部的)。

  2 运行速度

    由于orm要做很多操作,映射对象之类的,所以必然要消耗一些系统性能。这个也可以理解,快速开发,必然运行效率受损。

 

总结:

扬长避短。适度使用。

  1:大量数据表的简单的操作全部使用ORM。一般的操作,特别是插入、修改、删除等操作,使用ORM,快速方便。

  2:对于需要灵活操作的模块使用其他方法。比方说使用多表连接,或者其他复杂sql的逻辑等,就需要使用其他工具。

合理使用ORM,就是“扬长避短”的一个过程。这是一个通用的对待工具的态度。理智的对待ORM,我们采用ORM进行开发,才能从中获益。