纵观ORM, 用了不少了,每个ORM都有各自的特点,Grove写法不够严谨,下面的第一步都没有做好,性能没有测。
SPL,一是不开源,二是写法丑陋,功能较差,是我所用过的,最差的一个了。Nhibernate 和
Grove差不多,第一步也没有做好,不过性能不错。OQL.Net 一是不开源,二是性能较差,但是写法优雅,是我所用过的ORM 中最优雅的一款。
linq 或 Dlinq 或 Alinq
,都没有解决第一步,它只是从另一种方式上(从关键字上,应该说更具优越性)实现了sql的对象化,但linq 的sql 功能集合,比较小, 本质是
linq没有提供对应的 update 方法! 历史的车轮走过之后, 个人总结了ORM 的四步:
第一步, 实现Sql 的对象化。比较好的是 Oql.net , 这一步的关键在于, 应该对应到所有的公共SQL,而不可以有未实现的解决方案。
第二步, 实现各种数据库的 SQL 统一化, 比如 选第8到20条, 这样的话,各种数据库不一致,体现到 ORM 上,应该写法一致。
第
三步, SQL语句返回的结果实体化,每个数据库可以用不同的 Provider
,每种方法可以用不同的机制(DataSet,DataReader)。其中这一步尽可能的不用反射,这里是性能的瓶颈,NBear提供的方法是把实体化
这一步放到了实体的方法里(SetPropertyValues),但我认为还有一种更好的办法,就是 Entity 基类存放一个
Hashtable , 各个实体属性都用该 Hashtable ,就可以了。
第四步, ORM 可扩展化,
就是说,可以重写ORM的方法,以达到个性化的要求, 扩展化,还有一点, 要可扩展其它的数据库个性化支持,任何一个 ORM
不可能一步做到支持所有的数据库,
但应该提供出接口,以支持不同的数据库扩展。比如,我以自定义文本(或XML)当成一种数据库,用户扩展该数据支持,就OK了。