2009-08-03 10 views
1

Disons que j'ai un modèle User. Est-ce que je mettrais des méthodes sur le modèle lui-même, ou comme un modèle afin que je puisse y accéder à partir de l'objet table utilisateur?Dans Doctrine, où devrais-je mettre mes propres méthodes?

En d'autres termes, ce qui est préférable:

$u=new User(); 
$u->register($username, $password, $email); 

ou

$userTable = Doctrine::getTable('User'); 
$userTable->register($username, $password, $email); 

Mon instinct serait le second, car il est logiquement plus de sens, mais que des choses comme changer de mot de passe , se connecter, etc? Devrais-je vraiment les mettre sur le modèle User pendant que je garde des choses comme enregistrer sur l'objet table utilisateur?

Répondre

2

Il ne sera probablement pas une réponse complète à votre question, mais vous pourriez être intéressé par jeter un oeil sur les diapositives si la conférence Play-Doh: Modelling Your Objects que Matthew Weier o'phinney a publié il ya quelques jours; il contient des trucs sympas qui pourraient vous faire penser à Models ;-)

(Ils m'ont fait réfléchir ... Mais je ne peux toujours pas donner une réponse définitive à votre question: je dirais "ça dépend" ... Mais pas sûr de ce que ^^)

Probablement, dans la situation d'une grande demande, j'utiliser une couche plus:

  • Modèle, pour accéder aux données
  • « service », pour manipuler il ; être en mesure de faire plus que ce que je mettrais dans le modèle ... Et ne pas avoir que dans le contrôleur, où il ne fait pas partie
  • Et, bien sûr, contrôleur et Vues

Mais vous Je ne ferai jamais accepter tout le monde ... Donc, je dirais choisir un sens, et assurez-vous que tout le monde dans votre équipe le fait pour l'ensemble du projet: il n'y a rien de pire que de nombreuses façons mélangées dans un projet/application!

2

Généralement, si les choses se rapportent à une instance spécifique d'un utilisateur, c'est-à-dire: moi ou vous, elles appartiennent à la classe User. Si elles se rapportent à un groupe d'utilisateurs, ou si nous n'avons pas encore l'utilisateur (c'est-à-dire: en les chargeant à partir de la base de données), elles appartiennent alors à la classe Table.

je ferais votre exemple que:

class UserTable { 
    function register($username, $password, $email) { 
    $user = new User; 
    $user->username = $username; 
    $user->password = $password; 
    $user->email = $email; 
    $user->save(): 
    } 
} 

Les gens vont discuter où certaines choses appartiennent cependant, et l'épargne est l'un d'entre eux! Je sais que Propel, qui est un autre ORM PHP similaire, inclut une méthode save dans son équivalent Table, ainsi que dans son équivalent Object, et votre enregistrement est en quelque sorte analogue à cela. Alors que quelqu'un sera prêt à se disputer l'autre côté bientôt!

Pour répondre aux autres questions, à mon avis:

changement de mot de passe appartient à l'utilisateur, sans aucun doute - vous êtes en train de changer le mot de passe d'un utilisateur, son changeant seulement un champ.

La connexion doit être dans la classe table - c'est un cas de récupération spécifique.

Questions connexes