deerchao的blog

Be and aware who you are.

一些感想,欢迎拍砖

不可能无视数据库,即使使用了再高明的ORM技巧。
以下数据库特指关系型数据库,对象为面向对象的简写。

原因:
1, 数据库比对象技术更成熟。
      数据库实现的背后有关系运算的理论基础,而面向对象技术最多只能算实践中摸索出来的比较有效的手段。

2, 数据库有标准(SQL 9x, 03...第二范式,第三范式...)可参考,对象没有。
      不考虑性能的话,几乎每个DBA做出的选择都完全一样;不考虑性能的话,面向对象的人为了把系统划成100层还是99.5层争执不休。

3, 对象需要数据库,数据库不需要对象。
      数据库无关紧要吗?那你为什么非要把对象拆碎了存到数据库里,不把它们直接放到XML文档里呢?

4, 数据库的思维是针对集合操作,对象的思维是针对个体操作。
      也许泛型算法能弥补这个鸿沟,不过那也是C++里STL的事,和对象似乎关系不大。

5, 数据库的功能远不止存取数据,对象不能因为无法方便地应用这些功能而让它们走开,这时候该走开的是对象本身。
      想一想C# 3.0里为什么会有一个DLinq吧,它很面向对象么?

6, 只设计对象,数据库结构自动生成是不负责任的做法。
      且不提性能,只问你程序重构了,原来的数据怎么办?

7, ORM里最重要的不是R,也不是O,而是M。
      正因为一时半会儿O和R谁也取代不了谁,所以才需要M。好像Stan Lippman介绍 C++/CLI 时说最重要的反而是大家最不容易注意到的:那个斜杠才是整个术语的重点。

8, 理想总是美好的,现实总是残酷的。
      性能是每个程序员的最大敌人。

posted on 2007-04-21 02:42 deerchao 阅读(2090) 评论(24)  编辑 收藏

评论

#1楼  2007-04-21 03:17 沧海依粟      

数据库应该只是存储介质,两者没有什么可比性了;
非常同意6和8;   回复  引用  查看    

#2楼 [楼主] 2007-04-21 03:27 deerchao      

@沧海依粟
我是看到有些人认为ORM里最重要的是O,不对数据库进行任何考虑的想法觉得不理解,所以才斗胆在这里吼一嗓子,请大家让我清醒清醒,明白自己的理解到底差在哪里。   回复  引用  查看    

#3楼  2007-04-21 08:10 蓝梦 [未注册用户]

数据库仍然非常重要,能写非常高效的SQL语句仍旧是开发者的基本功。

如果连基本的SQL语句都写不好,会用再多的ORM又怎样?

如果ORM本身缺陷?怎么发现?怎么迅速处理DB的问题?   回复  引用    

#4楼  2007-04-21 09:04 jyk [未注册用户]

完全同意。可以直接从数据库到达用户界面,多个对象做什么呢?对象能够起多大的作用呢?

不过有的时候也真的把数据直接放到XML里面了,比如某些很注重效率的网站,就直接把详细的信息(比如新闻信息)放在xml里面了,呵呵。遇到了一个,顺便说了一下。   回复  引用    

#5楼  2007-04-21 09:16 蓝梦 [未注册用户]

@jyk

注重效率把数据直接放到XML里面了?

我不知道是提高效率还是降低效率:)

我只是知道xml读取比db慢n倍,因为db存储数据和XML机制完全不同,XML非常低效的方式。   回复  引用    

#6楼  2007-04-21 09:30 codeanywhere      

O/R Mapping ,还是R /O Mapping ,或者说需不需要这个这个东西,我认为O/R Mapping 最大的好处就是让开发人员与DB分开,并且可以轻松的操作一些实体类,这样可以在业务逻辑层面上直接对业务实体类,说白了就是,以前我们可能直接就是业务类中,把业务与存储过程结合起来,毕竟一个完整的业务最后要存储进入数据库,但是使用了O/R Mapping 后,我发现有的时候分层是清晰了,但是很不方便,比如很简单的一个操作,都需要很多代码,对数据库的操作可能就是CRUD 但是一个复杂的业务往往不是CRUD那么简单,举个最简单的例子,一个业务中使用了事物,那么还得要求你的O/R Mapping 组件能支持事物,如果按照以前的开发方式,我直接就是数据连接,开始事物,进行复杂业务的存储逻辑工作,然后提交事物,现在不行了,你要面对的是一个个分散的实体类,你把实体类在组织起来,所以总是感觉不很灵活,比如查询等,很多问题,我都没有想到好的解决方案。   回复  引用  查看    

#7楼  2007-04-21 09:50 iampawpaw [未注册用户]

2007-04-21 09:30 codeanywhere
O/R Mapping ,还是R /O Mapping ,...............


确实很有同感,如何让这些实体类在一个事务协同工作,确实很头疼,一般我是把Command当参数来传。   回复  引用    

#8楼  2007-04-21 10:14 jyk [未注册用户]

请稍微注意一下,我说的是网站,而且举一个例子新闻信息,把这样的信息放在XML里面,用户浏览的时候直接把XML发送给客户端,然后就没有服务器什么事了,这样效率就高了。就像csdn的帖子一样。   回复  引用    

#9楼  2007-04-21 10:28 Amnoh      

@jyk
说实话,CSDN的这种方式很不好说,兼容性的问题先不提,
现在好在机子都比较强了,两年前,我打开CSDN的帖子时,总是要CPU100%的,你说的高效也就是让服务器省点事,客户端根本没去管,如果用比较煽动的角度去说,光是客户端为了解析XML而浪费的能源,就不是小数目,而如果放在服务器解析的话,本来只需要一次就行的。
真正负责任的办法,就是像新闻这类型的,直接生成HTML,以后有请求,直接SHOW,这样两边都好。   回复  引用  查看    

#10楼  2007-04-21 10:42 蓝梦 [未注册用户]

@jyk

这样效率就高了?我看不出如何高了,我只是看到低了。   回复  引用    

#11楼  2007-04-21 10:45 蓝梦 [未注册用户]

@jyk
你是说由客户端自己解释XML么?那服务器倒是省事了,可客户端就惨了。
呵呵。   回复  引用    

#12楼  2007-04-21 10:54 阿毅 [未注册用户]

7, ORM里最重要的不是R,也不是O,而是M。
正因为一时半会儿O和R谁也取代不了谁,所以才需要M。好像Stan Lippman介绍 C++/CLI 时说最重要的反而是大家最不容易注意到的:那个斜杠才是整个术语的重点。

深切赞同!我看O,R不该谁要取代谁,各有存在的目的、任务。事物总是相似的,没有谁比谁更重要,只有谁更适合当下,要想彼此工作的更好,沟通是关键。   回复  引用    

#13楼  2007-04-21 10:57 kiler      

@蓝梦

没有人说用orm就可以不会sql,其实orm主要作用是用来简化一些常用的数据操作,复杂的查询还是用与sql相近的hql或者存储过程。

另外用orm也是不能绝对保证支持多种数据库。   回复  引用  查看    

#14楼  2007-04-21 11:01 蓝梦 [未注册用户]

@kiler
我不是那样理解的,只是某些新手会被ORM迷惑而已。

不满你说,我自己也开发了一套ORM机制,我已经在几个项目开始使用,并打算推广。   回复  引用    

#15楼  2007-04-21 11:23 唐德兵      

文章写的非常好啊,数据库具有程序无可比拟的特性,任何有价值的程序都是离不开数据库的,即使再ORM,也需要懂数据库的设计和相关方面的知识,否则对象关系映射就是空话。   回复  引用  查看    

#16楼  2007-04-21 11:56 Leem      

scope   回复  引用  查看    

#17楼  2007-04-21 12:17 Roach [未注册用户]

楼上三位正解   回复  引用    

#18楼 [楼主] 2007-04-21 14:37 deerchao      

谢谢大家的讨论,让我更明白和确信了自己的想法。

总而言之就是ORM里数据库绝对不是不重要的。   回复  引用  查看    

#19楼  2007-04-21 23:14 GerryJiang      

本来这两个就没冲突的,也本来就两者都重要,只不过,有时候有些人会强调某一些方面多一些罢了   回复  引用  查看    

#20楼  2007-04-22 11:07 no [未注册用户]

7, ORM里最重要的不是R,也不是O,而是M。
正因为一时半会儿O和R谁也取代不了谁,所以才需要M。好像Stan Lippman介绍 C++/CLI 时说最重要的反而是大家最不容易注意到的:那个斜杠才是整个术语的重点。

//不知这句话是楼主的本意还是别人的文字.如果楼主真的明白自己的第7点所表达的背景和意思的话,就不会提出其它7个问题了.   回复  引用    

#21楼 [楼主] 2007-04-22 12:56 deerchao      

@no
是我自己的话——不过也许是以前看过别人说过这话记不清了。
这一点是我写到那时忽然想到的,但并不敢确定。   回复  引用  查看    

#22楼  2007-04-23 06:27 温少      

SQL语言在数据处理方面,要比C#、Java、C++等Imperative类型的语言更有优势。

SQL属于Funtional Language,而C#、Java、C++等属于Imperative类型。

一般认为,Funtional Language比Imperative类型的语言的更先进一些,而Imperative类型的语言性能更好一些。   回复  引用  查看    

#23楼  2007-04-23 20:31 李龙 [未注册用户]

偶然来看看、没什么感想的
不知道说什么好啊   回复  引用    

#24楼  2008-02-22 12:56 Blurxx [未注册用户]

这个。。。不明白   回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-04-21 02:51 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接:
 




<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

导航

统计

公告

给网络添加价值,就是让自己增加价值.

本博客所有内容,均为原创或对互联网已有资源的再加工,希望对你有用.在声明原作者的前提下,你可以任意使用,但本人对其正确性,使用的后果等不做任何担保,也不负任何责任.

正则表达式30分钟入门教程 v2.21 2007-8-3

I Want Spec#!

与我联系

搜索

 

常用链接

留言簿(64)

我管理的小组

我的标签

随笔档案(125)

文章分类(9)

文章档案(9)

新闻档案(9)

Links

积分与排名

最新评论

评论排行榜