从Rails的活动记录说说元数据编程

文章原题: 跨越边界: 研究活动记录
作者是: Bruce Tate, 总裁, J2Life, LLC
 
      这篇文章分析的是Rails所用到的活动记录,ActiveRecord的技术。活动记录要做的大概跟O/R mapping差不多。不过O/R mapping是基于映射的,就是把类和数据库对应起来,而活动记录是基于包装,wrappping的,就是直接生成一些包装数据库表的类。ActiveRecord用到了Ruby当中的反射和元数据编程技术,简单的来说,就是当你声明一个类继承于ActiveRecord的Base类时,那么在运行时,这个继承事件就会发送到Base类当中,Base类就能够做一些数据库反射之类的操作,获得这个子类所要包装的表,然后再动态的修改子类的实现,为他添加对应的属性和方法。也就是在O/R mapping当中,我们所要定义的属性和方法都能够通过这种元数据编程方式实现。这样做的好处就是,ActiveRecord的子类非常简单,如果你不需要特殊的操作,那么一句声明语句,声明你是扩展了Base类就可以完全搞定。
      这种技术还是很有意思的,不过归根结底,这个技术也是用到了Ruby的反射和元数据编程,可惜元数据的能力就是Java所缺乏的,Java不提供这种动态的修改类代码的能力实在是丧失了不少有趣的应用。不过,还是有一些曲线救国的方式来大致达到这个效果,就是直接去hack虚拟机,在类装载的时候直接修改classfile的bytecode,这个方法估计以后会被用到的越来越多。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值