私は、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 do
name = self.first_name + ' ' + self.last_name
true
end
end
ここでの哲学的な問題は、コールバックまたはオブザーバー内でこのタイプの動作 (および何百もの同様の動作) を実装する必要があるかどうかです。以下の両方を行う理由がいくつか考えられます。
コールバック
- 動作の定義に簡単にアクセスできます (モデルの定義を見るだけで、どこを見ればよいかがわかります)
- フィールド/エンティティ間の一貫性を維持することは、補助的な問題ではなく、エンティティの動作の複雑な部分です。実際、データの一貫性を維持することは、(暗黙のうちに) あらゆるエンティティにとって第一級の要件です。
オブザーバー
- システムの動作が最終的により複雑になるにつれて、モデルはより軽量になる傾向があります (何百ものコールバック メソッドで肥大化することはありません)。
- フィールド/エンティティ間の一貫性を維持することは補助的な問題であり、モデルの主な責任とは関係ありません。したがって、外部オブザーバーに分解する必要があります
もっと経験のある人が私に教えてもらえますか?
- 私が調べていない特定の考慮事項はありますか?
- コールバックとオブザーバーに属するものを決定する際のガイドラインは何ですか?