浏览 3043 次
锁定老帖子 主题:ruby mixin的硬伤
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-29
他们的方法都是mixin到model中调用,都有一个cache?的方法,gettext的是判断是否cache i18n message,cache_fu的是判断是否cache model,结果gettext的cache?被cache_fu的cache?覆盖了,gettext内部调用了多次cache?就出现了上述的症状,虽然执行结果正常,但背后的行为跟期望的已经是大相径庭了,而且这样的情况还无法通过test来检查,这里要不是默认打开cache_fu的benchmark,根本就不知道问题所在 这样用mixin的时候都要小心了,不知道还有多少隐患,估计ruby以后应该会有相应的解决方案,例如在mixin的时候检查同名方法并产生警告 也给一个写module的建议,只暴露必要的方法,内部的调用还是用一个专有namespace分开 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-04-29
maxin? mixin?
|
|
返回顶楼 | |
发表时间:2008-04-29
标题很强悍...
不过说用很多插件的确带来这样的问题...还有很多插件随意打开Object的metaclass作一些有欠考虑的事情... 不过这个不能怪ruby,mixin其实是好孩子,插件是解决快速开发和reuse问题的不错方法,如果碰到问题首选从方法角度上解决,比如提交patch,而不是思考工具好还是不好 |
|
返回顶楼 | |
发表时间:2008-04-29
re楼上的,这个和mixin无关
http://avdi.org/devblog/2008/02/23/why-monkeypatching-is-destroying-ruby/ rails的plugins并不是银弹,有些实现的其实很糟糕,一定要慎用 |
|
返回顶楼 | |
发表时间:2008-04-29
Jan 写道 re楼上的,这个和mixin无关
http://avdi.org/devblog/2008/02/23/why-monkeypatching-is-destroying-ruby/ rails的plugins并不是银弹,有些实现的其实很糟糕,一定要慎用 怎么会没关系,其实就是多继承后同名方法的处理策略问题,ruby现在相当于基于顺序的处理 |
|
返回顶楼 | |
发表时间:2008-04-30
标题强悍点还是有好处的,至少吸引眼球嘛,只要内容是铿锵有力的就行~
我同意楼主的意见,mixin确实有潜在的危险,一旦有冲突,mixin顺序改变了就会影响结果,危险....给出警告是非常有必要的,目前加-w参数没有给出此警告. |
|
返回顶楼 | |