使用 scientist 科学重构代码
github/scientist 这个库用于重构代码后,在生产环境中做实际检测用的。因为测试并不充分,有时需要在生产环境试试才行。
require "scientist"
class MyWidget
def allows?(user)
experiment = Scientist::Default.new "widget-permissions"
experiment.use { model.check_user?(user).valid? } # old way
experiment.try { user.can?(:read, model) } # new way
experiment.run
end
end
在生产环境中 use 和 try 中的代码块都会执行,然而只会返回 use 代码块的结果,try 代码块的结果会与 use 的结果进行比较,并不会对其他代码产生影响。
所以要保证 try 的代码必须不会影响到数据库这种第三方服务的。
重构代码是为了保证不影响原有逻辑的前提下,提升代码执行效率、代码可读性以及代码组织等等。
这还有个 nodejs 版本的 https://github.com/ziyasal/scientist.js
参考: