用block简化编程一例

block在ruby中被广泛的使用,即使是Java,spring也大量使用类似的概念来应用于template,但远远没有ruby好用。来看一个简单的应用实例:

在ruby中自己调用memcache-client对费时的查询进行缓存,也就是自己实现的简单的查询缓存:

if RAILS_ENV == 'test'
@top_topic = TopTopic.get_topic
elsif @top_topic = Cache.get("TopTopic.get_topic")
Cache.put("TopTopic.get_topic",@top_topic, 60*30) if @top_topic = TopTopic.get_topic
end


先判断是否测试环境,如果测试环境,就略过缓存,直接读取数据库,如果不是测试环境,那么先取缓存,如果缓存里面有,就返回,如果缓存里面没有,去查询数据库,查询数据库后,再判断是否查出来结果,如果没有结果就不填充缓存,如果有结果,就填充缓存。

逻辑够复杂的,好在ruby语法够简洁,几行就搞定了,但饶是如此,每个QueryCache都这么写,就太难看了,也不符合DRY原则,于是抽象出来一个QueryCache类:


class QueryCache
# Usage: QueryCache.get(key, timeout) { Model.find_method}
def self.get(key, timeout = 60* 30)
return value = yield if RAILS_ENV == 'test'
unless value = Cache.get(key)
Cache.put(key, value, timeout) if value = yield
end
value
end
end


于是所有的查询缓存可以简化为一行代码:

QueryCache.get("TopTopic.get_topic", 60*30) { TopTopic.get_topic }


这样查询缓存写起来就容易多了,完全屏蔽了复杂的逻辑判断,只要传cache的key,timeout和实际查询语句三个参数就搞定了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值