2009-03-06 8 views
1

私はActiveRecordを使ってユーザーに関する情報を管理しています。 Userクラスには、予期されるload()、insert()、update()、delete()メソッド、setter、getterなどがあります。しかし、他の特定のメソッドをUserクラスに含めるか、共同作業者が処理するかどうかを決定するのは難しいです。クラスの責任とコラボレータの決定

はここに例を示します

ユーザーが確認を必要と要求することがありますいくつかのトランザクションがあります。これは、従来の方法で処理されます。リンクを使用してユーザーに電子メールを送信します。リンクをクリックすると、ユーザーは実際にトランザクションを進めたいと考えていることを確認します。検証キーのハッシュと有効期限はユーザーレコードの一部として保持されます。

このプロセスではどこに線を描く必要がありますか?検証を処理する共同作業者が存在する必要があります(たとえば、クエリ文字列からプレーンテキスト検証キーを受け取り、Userオブジェクトをパラメータとして受け入れるなど)。または、これは内部的にUserクラスによって処理されるべきです(メソッド呼び出しでプレーンテキストの検証キーを渡す)?

ベリファイ時に起こる次のことは、トランザクションがアクティブレコードへの更新を必要とすることです。ユーザークラスが責任を持っている必要があります。

提案がありますか?

答えて

0

confirmationsテーブルを管理する共同作業者にこのタスクを委任する必要があります。

Confirmationモデルを使用して、すべての確認要件を追跡します。モデルはUserに属し、確認ハッシュと確認するアクション(たとえば、activate_accountchange_passwordまたはchange_emailなど)を管理します。

Confirmationコントローラは、確認ハッシュを検証し、適切なモデルに適切なアクションをチェーンの責任であろう(例えばactivate_account - >user.activate()change_password - >user.setPassword()など)、正常に終了すればconfirmationsテーブルからConfirmationを除去します。

これにより、ロジックの分離が向上し、スケールを改善することができます。 (パスワードを変更する確認がおよびに変更されていることを確認する)

+0

@Vlad - 現実の確認をありがとう。これは間違いなく正しい選択です! – PartialOrder

関連する問題