Ruby on rails Rails:我应该使用观察器还是回调(使字段保持最新)?
我正在开发一个系统,ActiveRecord实体和字段需要始终保持一致。通常,某些字段是从其他字段派生的,需要始终保持最新。有时,这甚至可能发生在实体之间 例如:Ruby on rails Rails:我应该使用观察器还是回调(使字段保持最新)?,ruby-on-rails,activerecord,callback,models,observer-pattern,Ruby On Rails,Activerecord,Callback,Models,Observer Pattern,我正在开发一个系统,ActiveRecord实体和字段需要始终保持一致。通常,某些字段是从其他字段派生的,需要始终保持最新。有时,这甚至可能发生在实体之间 例如: 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 d
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
class用户
这里的哲学问题是,我是否应该在回调中或在观察者中实现这种类型的行为(以及数百种类似的行为)。我可以想出以下两个理由:
回调
- 行为定义更容易访问(只需查看模型定义,您就知道在哪里可以查看)
- 保持字段/实体之间的一致性不是一个辅助问题,而是实体行为的一个复杂部分。事实上,保持数据一致性(隐含地)是任何实体的首要要求
- 随着系统行为最终变得更加复杂,模型往往更加轻量级(而不是使用数百种回调方法)
- 保持字段/实体之间的一致性是一个辅助问题,与模型的主要职责无关;因此,应将其分解为外部观察者
- 有什么我没有考虑的具体问题吗
- 在决定哪些内容属于回调还是观察员方面,您的指导方针是什么
此外,您还可以禁用Rails中的观察者,从而使单元测试更快,而不必担心触发“回调”。observators=>与对象无关的事件及其自身相关问题: