当元编程有副作用时如何重构?

时间:2012-12-12 13:02:44

标签: ruby-on-rails ruby ruby-on-rails-3 refactoring metaprogramming

我正在使用Ruby on Rails 3.2.9和Ruby 1.9.3-p125。在我previous question结束之后我发现了一个关于元编程自编acts_as_customizable插件的问题,因为相关代码在其他类上具有副作用而不是“可自定义” ”

总结一下问题:acts_as_customizable模型“内部”(通过元编程)的Article方法为customize模型添加Comment方法,并在为了节省时间,Rails不会在启动时加载所有这些类,使应用程序引发NoMethodError - undefined method 'customize' for #<Comment:0x0...> ,直到加载Article类。

建议的解决方案是require_dependency 'article'模型中的Comment,但我正在寻找另一种方式(可能更好的建议方案)让应用程序正常工作,但没有任何问题,就像在这个问题中解释的那样。也就是说,我想保留一个*短代码**和相同的行为但是使用更“合适”的方式来制作东西,可能会更改类的加载过程或计划大量的重构如有必要,整个代码。

我该如何处理这种情况?你怎么看?


更新:经过一番研究后,我发现问题仅出现在开发模式中,因为config.cache_classes设置为false,使每个请求都重新加载类。


注意:我想指出元编程在我的案例中非常有用,ArticleComment类在方面彼此高度相关我的“定制”概念。所以我想找到一个解决方案来减轻对基础行为的改变


*在我的情况下,元编程(即使它有副作用)使我避免了很多代码语句。

0 个答案:

没有答案