到底什么是 O/R Mapper
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
http://blog.devep.net/virushuo/2004/01/05/_or_mapper.html
为什么要翻译这个?
一次和一个群里面的朋友聊天,有人说最近发现了新的设计数据库方法,就是把数据库的列和对象属性一一对应,这样设计很方便。我说寒,那有这么容易的,实际情况复杂去了,怎么能一一对应。
然后老兄大骂了我不懂,然后找来一篇文章作论据,我打开看看,是讲O/R Mapper的。我寒的不行,没敢再多说话。
印象中始终缺乏好的关于O/R Mapper的中文文章,所以造成很多人概念不清。O/R Mapper到底是什么?
Steve Eichert这一系列文章讲得不错。打算跟着翻译一下,给自己增加点认识。当然也希望对更多的人有所帮助。
原文:http://dotnetjunkies.com/weblog/seichert/posts/4677.aspx
到底什么是 O/R Mapper
最近社区里面讨论O/R Mapper的越来越多了,但是,到底什么是O/R Mapper呢?
让我们从O/R开始。字母O起源于
"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,
我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
当你开发一个应用程序的时候(不使用O/R Mapper),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等任务。而这些代码写起来总是重复的。
如果打开你最近的程序,看看DAL代码,你肯定会看到很多近似的通用的模式。我们以保存对象的方法为例,你传入一个对象,为SqlCommand对象添
加SqlParameter,把所有属性和对象对应,设置SqlCommand的CommandText属性为存储过程,然后运行SqlCommand。
对于每个对象都要重复的写这些代码。
除此之外,还有更好的办法吗?有,引入一个O/R Mapper。实质上,一个O/R
Mapper会为你生成DAL。与其自己写DAL代码,不如用O/R Mapper。你用O/R
Mapper保存,删除,读取对象,O/RMapper负责生成SQL,你只需要关心对象就好。
好,还有什么问题?哈哈,我从没有讨论过Mpaaer这个部分。现在,我们有对象,有关系数据库。在他们之间我们有自己的O/R Mapper。很多时候,对象的属性不可能100%和数据库的列相符。为了把我们的customer对象的FirstName属性保存到数据库的 t_Customer表中的first_name列,我们需要做一些"Mapping"。我们需要让O/R Mapper保存FirstName属性到t_Customer表中的first_name列。我们在O/R Mapper中设置这些Mapping。除了mapping对象属性,我们还需要定义keys及对象关系。
优秀的O/R Mappers会提供设计器,帮助我们设置所有需要的mapping。一些不成熟的O/R Mappers(大多是FREE的)用xml文件来定义对象和数据库的mappings,另一些用自定义属性完成。通过什么方法mapping不是最重要 的,重要的是这种O/R Mapper允许我们设置哪些mappings。
定义好所有的mapping之后,这个O/R Mapper可以帮我们做很多的工作。通过这些mappings,这个O/R Mapper可以生成所有的关于对象保存、删除、读取的SQL语句,我们不再需要写那么多行的DAL代码了。
O/R Mappers远不止我所讨论的这些内容,在以后的贴子中,我将继续讨论O/R Mappers提供的其他功能。





Comments
好文!昨天写了cn触发器,发现自己数据库还很弱智,被老鼠骂个半死,准备复习数据库先。
Posted by: NetFire(Fire.Rolland.Han) | January 5, 2004 10:29 AM
很有前途的东西,值得关注
Posted by: df | January 5, 2004 10:44 AM
o/r mapping看来我是权威了 :0
我关注这个东西有半年多了
亲自实现了一个vb6的简单的框架
新的完整的broker功能的o/r mapping框架设计中...
仅仅是o/r的映射并不难,难的是提供一种数据库无知的查询
一种将sql脚本转化为对类的操作的方式
Posted by: progame | January 5, 2004 1:01 PM
难的是提供一种数据库无知的查询
一种将sql脚本转化为对类的操作的方式
作的就是这个啊...不过我无意自己做这东西,毕竟再的好得多的是。我想做得只是翻译一系列(也有可能自己写)普及和推广性质的文章。毕竟不懂的人还是多数。闹出我文中写的那位老兄的笑话就搞笑了。
Posted by: virushuo | January 5, 2004 1:20 PM