首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails:我应该使用观察者还是回调(以保持字段的更新)?

Rails:我应该使用观察者还是回调(以保持字段的更新)?
EN

Stack Overflow用户
提问于 2012-09-27 15:45:16
回答 1查看 1.6K关注 0票数 2

我正在开发一个系统,在这个系统中,ActiveRecord实体和字段需要始终保持一致。通常,某些字段是从其他字段派生出来的,需要随时更新。有时,这种情况甚至可能发生在不同的实体之间。

例如:

代码语言:javascript
复制
class User < ActiveRecord::Base
  attr_accessible :first_name, :last_name
  attr_protected  :name

  # I need to keep 'name' up to date at all times
  after_update do
    name = self.first_name + ' ' + self.last_name
    true
  end
end

这里的哲学问题是,我是否应该在回调或观察者内部实现这类行为(以及数百种类似的行为)。我可以想出以下两种做法的几个理由:

回调

  • 行为定义更容易访问(您只需查看模型定义就知道在哪里查看)
  • 保持字段/实体之间的一致性并不是一个附带的问题,而是实体行为的一个复杂部分。事实上,保持数据的一致性对于任何实体来说都是一流的要求。

观察员

  • 随着系统行为最终变得更加复杂,模型往往更轻量级(而不是由于数百个回调方法而膨胀)。
  • 保持字段/实体之间的一致性是一个辅助性问题,与模型的主要责任无关;因此,应将其分解为外部观察员

有更多经验的人能指点我吗?

  • 有什么特别的考虑,我没有调查过吗?
  • 在决定回调与观察者之间属于什么方面,您的指导方针是什么?
EN

回答 1

Stack Overflow用户

发布于 2012-09-27 18:15:49

根据Design书,这是最适合观察者模式的。使用和观察者,您的after_update/save逻辑将与模型分离。从您的示例中很难看出,但是如果您正在从回调中更新其他模型,那么您正在使用其他模型的知识来污染您的用户模型。因此,观察员应该介入来处理这个问题。

此外,您还可以在Rails中禁用观察者,从而使您的单元测试在不关心触发“回调”的情况下更快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12625178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档