http://jack.lifegoo.com/?p=8
设计模式是编程语言能力弱的表现(Patterns are signs of weakness in programming languages)
http://blog.plover.com/2006/09/11/index.html
按照这篇文章的分析,就是这么一回事情。
一篇文章有许多评论,一个文件夹有许多文件,一个公司有许多人。。。在这类一对多的情形中,我们往往都需要统计评论数,文件数,人数。这样的情况反复出现,难道不应该有一种“模式”来统一处理吗?
一个帖子(post)有许多评论(comments):
[code]class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post,:counter_cache=>true
end[/code]
每增加一个评论,则帖子的评论数应该增加一,若删除一个评论,则评论数应该减少一。
counter_cache=>true这个命令,就是告诉ror按照上面的规则去做事情。
我们只需要处理评论的创建删除等等就可以了,不必去关心评论数的处理(ror帮你完成了)
由此可见,RoR与其说是一种框架,不如说是一种增强了的编程语言:把上面的反复出现的情况,以“模式”的形式融入了RoR中,用一个简单的counter_cache=>true命令,就搞定了。
设计模式是编程语言能力弱的表现(Patterns are signs of weakness in programming languages)
http://blog.plover.com/2006/09/11/index.html
按照这篇文章的分析,就是这么一回事情。
一篇文章有许多评论,一个文件夹有许多文件,一个公司有许多人。。。在这类一对多的情形中,我们往往都需要统计评论数,文件数,人数。这样的情况反复出现,难道不应该有一种“模式”来统一处理吗?
一个帖子(post)有许多评论(comments):
[code]class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post,:counter_cache=>true
end[/code]
每增加一个评论,则帖子的评论数应该增加一,若删除一个评论,则评论数应该减少一。
counter_cache=>true这个命令,就是告诉ror按照上面的规则去做事情。
我们只需要处理评论的创建删除等等就可以了,不必去关心评论数的处理(ror帮你完成了)
由此可见,RoR与其说是一种框架,不如说是一种增强了的编程语言:把上面的反复出现的情况,以“模式”的形式融入了RoR中,用一个简单的counter_cache=>true命令,就搞定了。