ORM的一些思考

    纵观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了。

posted @ 2008-11-22 10:54  NewSea  阅读(388)  评论(2编辑  收藏  举报