2009-10-12 8 views
3

Je cherchais juste un peu de conseil, actuellement ma conception de DB est qu'un utilisateur a beaucoup d'affichages de blog. Maintenant, j'ai une classe d'utilisateur et un cours de blog.PHP OOP question

Cependant, je ne suis pas sûr de la bonne façon d'obtenir tous les billets de blog pour cet utilisateur. Est-ce que je crée une fonction getAllBlogs() dans la classe d'utilisateur qui renvoie des objets de blog ou crée-t-on une classe de blog principal que vous pouvez rechercher par utilisateur, donc ce serait getAllBlogsForUser ($ id)

Merci :-)

Répondre

6

J'utiliserais personnellement l'option postérieure. C'est parce que la classe de blog sait comment traiter la (les) table (s) de blog. Je ne voudrais pas écrire de code DB spécifique au blog dans la classe d'utilisateurs. D'un autre côté, vous pouvez toujours ajouter User::getAllBlogs() comme enveloppe autour de Blog::getAllBlogsForUser().

+0

Exactement. Une méthode statique dans Blog, qui peut être appelée par une méthode d'instance dans User est probablement le chemin à parcourir. L'ajout de la méthode à l'utilisateur vous apporte commodité et mise en cache (voir ma réponse ci-dessous) – timdev

2

C'est vraiment à vous de voir. Puisque les utilisateurs sont assez étroitement liés aux blogs, vous pouvez faire les deux.

Tenir compte comment ils pourraient bien jouer ensemble:

<?PHP 
class User { 
    protected $_blogs; 

    public function getBlogs($force=false){ 
     if (empty($this->_blogs) || $force){ 
      $this->_blogs = BlogClass::getBlogsByUser($this->user_id); 
     } 
     return $this->_blogs; 
    } 
} 

vous pouvez maintenant saisir les blogs d'un utilisateur chaque fois que vous voulez, et il va les chercher seulement si nécessaire. Le paramètre $ force peut être utilisé pour forcer un rechargement.

+0

+ 1 effort supplémentaire pour implémenter la mise en cache – Tres

0

Je voudrais utiliser les deux, comme User::getPosts et Posts::findByUserId ("Posts" comme nom de modèle me semble mieux que "Blogs"). Les deux méthodes ont des fonctionnalités similaires et celle à utiliser dépend du contexte, par exemple, le client préfèrera utiliser le modèle des utilisateurs, alors que dans les méthodes de recherche de l'interface d'admin pourrait être plus approprié.

0

Je voudrais créer les deux. Votre User :: getBlogs() pourrait utiliser Blogs :: getBlogsByUserId ($ idUser) car lorsque vous êtes dans le contexte utilisateur, vous aurez accès à l'identifiant de l'utilisateur pour passer à la méthode Blogs.

1

Je ne suis pas sûr que ce soit réellement une réponse utile .. Cependant, si votre conception db est faite correctement avec les bonnes pratiques de normalisation en place .. il devrait être révélateur de vos dispositions de classe ainsi. Comme l'utilisateur est une entité indépendante, et que les messages utilisent user_id ou quelque chose comme clé étrangère, cela devrait clairement vous donner l'idée de qui devrait être le maître. Les utilisateurs peuvent exister sans messages, mais les messages ne peuvent pas exister avec les utilisateurs. Il est donc logique de placer la méthode get posts dans la classe des écritures plutôt que dans la classe des utilisateurs.