不可能无视数据库,即使使用了再高明的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, 理想总是美好的,现实总是残酷的。
性能是每个程序员的最大敌人。