Nik*_*s D 11 ruby design-patterns ruby-on-rails
假设我们在模型中有一个方法
应该在方法本身内部发生"保存"调用,如下面的代码
def result
save! if new_record?
# do some funky stuff here that may also change the model state
# ...
# And calculate the return value
search_result = "foo" # Let's say "foo" is the value we calculated
save! if changed?
search_result # return
end
Run Code Online (Sandbox Code Playgroud)
或者外部观察者(控制者)是否应负责根据需要进行保存?
如果你的方法确实需要做到这一切,那就这样吧。
但是,我会通过查看该方法清楚地说明为什么要这样做(这里的注释可能很好),并且肯定会将其设为 a bang_method!
,以便调用它的人清楚该方法很容易与想要多少就多少。
另外,方法名称result
(我知道,可能不是您真正的方法名称)在某种程度上暗示您只是在获取数据,仅此而已。也许load_result!
在这里更合适,为了更清楚地表明您不仅仅是访问一个属性,而且实际上是在执行大量操作来获取它。