今天执行一个页面的的时候发现日志输出了50行的"==> Got Users::User from cache. (0.00000)",觉得很奇怪,没有请求这么多次user啊,分析到后面发现原来是gettext跟cache_fu着两个插件的冲突引起的 他们的方法都是mixin到model中调用,都有一个cache?的方法,gettext的是判断是否cache i18n message,cache_fu的是判断是否cache model,结果gettext的cache?被cache_fu的cache?覆盖了,gettext内部调用了多次cache?就出现了上述的症状,虽然执行结果正常,但背后的行 ...
2008-04-16

Ruby元编程 打破private protected限制

关键字: meta programming
需求源于分离职责, 对一些涉及多个model的业务,专门分出一个service层来负责,一个service的方法就是装配不同model提供的方法,这些model的方法应该只能被service调用,而不能被controller调用,那就将这些方法设置为private或者protected(绝对限制是做不到的,起码跟普通方法有所区别,不能直接调用),外部只能用send来调用,但如果调用多的话,一是难看且麻烦,二是影响性能,那就meta programming一下吧 思路是动态产生调用者类的子类,然后委托该子类调用父类的private或protected方法,如果调用者是单件类(metaclass ...
lllyq
搜索本博客
我的相册
Ffb80485-d689-36e1-9787-53691ad44877-thumb
filemanager
共 8 张
最近加入圈子
存档
最新评论