模型方法本身应该调用"保存"吗?

Nik*_*s D 11 ruby design-patterns ruby-on-rails

假设我们在模型中有一个方法

  1. 需要仅在保存的记录上调用
  2. 可能会更新模型本身,因此需要在文字之后再次保存模型

应该在方法本身内部发生"保存"调用,如下面的代码

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)

或者外部观察者(控制者)是否应负责根据需要进行保存?

Mat*_*chu 4

如果你的方法确实需要做到这一切,那就这样吧。

但是,我会通过查看该方法清楚地说明为什么要这样做(这里的注释可能很好),并且肯定会将设为 a bang_method!,以便调用它的人清楚该方法很容易与想要多少就多少。

另外,方法名称result(我知道,可能不是您真正的方法名称)在某种程度上暗示您只是在获取数据,仅此而已。也许load_result!在这里更合适,为了更清楚地表明您不仅仅是访问一个属性,而且实际上是在执行大量操作来获取它。