Doctrineでは、自分のメソッドをどこに置くべきですか?
質問
ユーザーモデルがあるとします。モデル自体にメソッドを配置しますか、それともユーザーテーブルオブジェクトからアクセスできるようにテンプレートとしてメソッドを配置しますか?
言い換えれば、より好ましい:
$u=new User();
$u->register($username, $password, $email);
または
$userTable = Doctrine::getTable('User');
$userTable->register($username, $password, $email);
論理的にはより理にかなっているので、私の本能は2番目のものになりますが、パスワードの変更やログインなどはどうでしょうか?ユーザーテーブルオブジェクトに登録するようなものを保持しながら、実際にユーザーモデルにそれらを配置する必要がありますか?
解決
おそらくあなたの質問に対する完全な回答にはなりませんが、 Play-Doh:数日前にMatthew Weier o'phinneyが公開したオブジェクトのモデリングカンファレンス。モデルについて考えるようにする素敵なものがあります;-)
(彼らは私に考えさせた..しかし、私はまだあなたの質問に決定的な答えを与えることはできません:私は「それは依存します」と言いたいです...しかし、何がわからないか^^)
おそらく、大きなアプリケーションの状況では、もう1つのレイヤーを使用します:
- データにアクセスするためのモデル
- "サービス&quot ;、それを操作します。私がモデルに入れた以上のことができるようになりました...そして、それが所属していないコントローラーには持っていません
- そしてもちろん、コントローラーとビュー
しかし、誰もが同意することは決してないだろう...だから私は一つの方法を選んで、あなたのチームの全員がプロジェクト全体でその方法をすることを確認するだろう。プロジェクト/アプリケーション!
他のヒント
一般に、物事がユーザーの特定のインスタンスに関連する場合、つまり、私またはあなたの場合、それらはUserクラスに属します。それらがユーザーのグループに関連する場合、またはユーザーがまだない場合(つまり、データベースからそれらをロードする場合)、それらはTableクラスに属します。
私はあなたの例を次のようにします:
class UserTable {
function register($username, $password, $email) {
$user = new User;
$user->username = $username;
$user->password = $password;
$user->email = $email;
$user->save():
}
}
人々は、いくつかのものがどこに属しているかについて議論しますが、保存はそれらの1つです!別の同様のPHP ORMであるPropelには、同等のオブジェクトと同等のオブジェクトにsaveメソッドが含まれており、登録はこれに似ていることを知っています。だから誰かがすぐに反対側を議論するために一緒にいることを確認してください!
他の質問に答えるために、私の意見では:
パスワードの変更はユーザーに属します。間違いなく、ユーザーのパスワードを変更するだけで、フィールドを変更するだけです。
ログインはテーブルクラスで行う必要があります-取得の特殊なケースです。