关于数据库crud(create retrieve update delete)自动化辅助工具,其中的翘楚必然是orm(对象-关系映射)工具。
hibernate,activerecord分别可以说是发挥了java,ruby语言哲学到极致的工具,其他动态语言的orm工具大都参考这两者的架构和模式,使用他们的前提是掌握面向对象基础(面向对象3原则及应用)和数据库应用基础(设计范式和SQL语言)。
相对简单一点的是根据数据库中获得的表结构实现简单crud功能的库,但是因为功能太简单,对于处理表和表之间的关联关系力不从心,在我的实际经验中很早就废弃了。
说回静态语言,c++语言目前为止没有完整案例的orm工具,因为c++标准库并不提供完整的反射库,只提供了基础的RTTI。没有反射库就写不出orm,所以虽然有一小撮分子研究过自己写反射库,再写orm,不过都流产了,要么就变形了——利用有限的功能变相实现部分功能,在joel的博客上有人发了c++ orm的讨论,应者寥寥,讨论中说到的类库俺看了下,都不完整。
那么静态语言就真的不行了?受中国亿万开发人员拥护的宝兰公司(IDE部分已经因为入不敷出分拆出codegear公司)的王牌设计师Anders(亦为微软设计了.net)所设计开发的vcl库,拥有足够的反射能力,国内一个delphi开发者yyanghhong据此开发出了一个orm工具,据他最后javaeye的帖子中说,将参考hibernate的结构实现delphi版的orm,不过也有1年多未有消息了――可能和我一样,1年前发布的改hibernate和tomcat的模块后,也有人问过我相关知识,但一个一直为吃饭忙乎的人是顾不上了。另有一位网友提供了一个开源的delphi orm emvc,目前只出到1.03alpha版,我还没用过。
因为vcl库的强悍,基于他的C++ Builder也拥有同等威力,经过我的研究,delphi和c++ builder都是有能力实现ORM的。
在一个orm盛行的年代,静态语言没有自身的orm是痛苦的,对于C++在开发mis功能的时候,目前有些公司采用了搭配python,用python语言的orm库来开发。
话到这里就结束了,不愁吃饭的话我也想打磨打磨c++的orm,呵呵。