Ruby:用block简化编程一例
来源:互联网 发布:电脑照相软件下载 编辑:程序博客网 时间:2024/03/29 17:39
block在ruby中被广泛的使用,即使是Java,spring也大量使用类似的概念来应用于template,但远远没有ruby好用。来看一个简单的应用实例:
在ruby中自己调用memcache-client对费时的查询进行缓存,也就是自己实现的简单的查询缓存:
先判断是否测试环境,如果测试环境,就略过缓存,直接读取数据库,如果不是测试环境,那么先取缓存,如果缓存里面有,就返回,如果缓存里面没有,去查询数据库,查询数据库后,再判断是否查出来结果,如果没有结果就不填充缓存,如果有结果,就填充缓存。
逻辑够复杂的,好在ruby语法够简洁,几行就搞定了,但饶是如此,每个QueryCache都这么写,就太难看了,也不符合DRY原则,于是抽象出来一个QueryCache类:
于是所有的查询缓存可以简化为一行代码:
这样查询缓存写起来就容易多了,完全屏蔽了复杂的逻辑判断,只要传cache的key,timeout和实际查询语句三个参数就搞定了。
在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和实际查询语句三个参数就搞定了。
- Ruby:用block简化编程一例
- Objc block系列一:使用block简化collection遍历
- Ruby Block
- Ruby元编程(一)
- Ruby元编程笔记一
- Ruby元编程笔记<一>
- ruby 用block来创建hash
- 用 JDOM 简化 XML 编程
- 用 JDOM 简化 XML 编程
- 用 JDOM 简化 XML 编程
- 用 JDOM 简化 XML 编程
- 用 JDOM 简化 XML 编程
- 用 JDOM 简化 XML 编程
- 用 JDOM 简化 XML 编程
- 用 JDOM 简化 XML 编程
- 简化SQL语句一例
- 用map, next 和 reject 简化代码(ruby)
- 研读《Ruby元编程》一书
- linux整数ID管理机制---整数ID号和特定指针关联在一起的机制
- 【RLIB】内存流(Stream) 的简易C++实现
- 使用单件注册表的单件模式例子
- 匈牙利命名规则
- Java Foundation Classes Hierarchy
- Ruby:用block简化编程一例
- MPI编程
- jquery 特效整合
- 【RLIB】Socket类 的C++简易实现
- 感冒
- framework---bt
- 常用的Intent Flag 说明
- 使用Python实现win32下IconOverlay开发
- http://www.cnblogs.com/iminto/archive/2010/12/23/1915232.html