[POO]Forum optimiser

Rechercher

[POO]Forum optimiser

Par saturn1  -  13 reponses  -  Le 18/01/2009 01:16  -  Editer  - 

Bonjour d'ici quelques temps je devrais réaliser un forum en POO.

Je me demandais si il y a un réel gain de temps pour développer un forum en objet ou en procédural?

Deuxièmement je ne vois pas trop comment structurer.

Je me dit je peux créer les objets suivants :

-Sujet (pourqu'oi pas dérivé d'une classe Message)

-Réponse (pourqu'oi pas dérivé d'une classe Message)

-Categorie

Voilà dis moi ce que je peux faire en plus en mieux.

Merki :)

 

Réponses apportées à cette discussion

Par Emacs  -  Le 18/01/2009 13:01  -  Haut de page  - 

Salut,

Pour une application de forum, il est selon moi clairement nécessaire d'avoir une approche orientée objet dans le but de structurer le développement et de le rendre plus simple et maintenable.

Tu commences sur papier par définir les différentes entités de ton forum (User, Administrator, Moderator, Thread, Message, Category...). Puis une fois que tu as défini tes entités, tu définis les relations qu'il y'a entre elles afin d'identifier les différentes cardinalités entre les futures tables. Par exemple :

  • Un User peut poster 0 ou plusieurs threads,
  • Un thread ne peut avoir qu'un et un seul User,
  • Une catégorie peut contenir 0 ou plusieurs threads,
  • Un thread ne peut appartenir qu'à une catégorie...

Une fois que tes relations sont identifiées, tu détermines quelles sont les attributs de chaque entités. Par exemple pour le User, c'est son Id, pseudo, email... Ton modèle devrait commencer à prendre forme. Quand tu as réussi à définir tout ça, tu peux transformer ton modèle de données en tables SQL. Un conseil, commence tout de suite par utiliser le moteur de stockage InnoDB pour pouvoir travailler avec des transactions SQL et pouvoir faire du contrôle d'intégrité des données.

Enfin, quand ta base de données est montée, tu peux commencer à écrire tes classes de modèle : User, UserTable, Category, CategoryTable... avec les attributs pour représenter les champs de la table associée ainsi que les getters et setters.

Maintenant tu es prêt à démarrer tes développements et à utiliser tes objets pour construire ton forum. Au fur et à mesure que tu développeras, tu t'apercevras que certaines classes de ton modèle devront s'enrichir de méthodes supplémentaires. Par exemple, dans les classes Administrator et Moderator, tu pourras imaginer une méthode moderateThread() qui prend en paramètre un objet Thread, et qui permet de désactiver / supprimer un thread du forum.

Pour le développement d'un forum, je t'invite à t'appuyer sur un petit framework qui possède :

  • une architecture MVC,
  • un système de routing avec des smart URL,
  • une gestion simplifiée des accès à la BDD via Active Record par exemple.

Ca te facilitera grandement la vie pour le développement d'un forum. Tu peux regarder des petits frameworks comme Kohana, CodeIgniter, SolarPHP... Après, tu peux te lancer aussi dans du Zend Framework ou du symfony mais tu vas démarrer moins vite ton projet.

++

Hugo.

 
Par saturn1  -  Le 18/01/2009 13:14  -  Haut de page  - 

Ok donc tu renforces ce que je pensais.

Cependant j'ai une chose dont j'ai du mal à faire la différence.

TU me dis la méthode moderate Thread .

Pourqu'oi tu la met dans la classe Modérateur et non dans la classe ThreadManager.

C'est sur ce point ou j'ai du mal à faire la différence.

Merci

 
Par Emacs  -  Le 18/01/2009 13:26  -  Haut de page  - 

Ce sont bien les objets Moderator et Administrator qui peuvent modérer un sujet. Donc forcément la méthode a plus de sens à être implémentée dans ces deux classes plutôt qu'ailleurs. En effet, dans ton code, tu pourras écrire quelque chose comme ça :

<?php
// Ici tu vérifies que ton user est bien loggué
// et que si c'est un modérateur alors tu crées l'objet Moderator
// Là on récupère le thread à modérer
$thread = ThreadTable::findById($_GET['id']);
if (!is_null($thread))
{
  $moderator->moderateThread($thread);
  redirection();
}

Si tu veux te simplifier la couche d'accès à la base de données et la génération des classes, je t'invite à utiliser l'ORM Doctrine () .

++

 
Par saturn1  -  Le 18/01/2009 14:15  -  Haut de page  - 

Lool mais sur le forum du site du zero...(je sais pas si c'est une référence^^) quand je faisais un système de news : j'avais mis la méthode posterNews updateNews deleteNews dans la classe Redacteur et on m'a dit de les mettre dans la classe NewsManager...

Je ne comprend plus rien :p:p ^^

 
Par Emacs  -  Le 18/01/2009 14:33  -  Haut de page  - 

Je ne vais pas débattre sur le SiteDuZero car selon moi ce n'est pas du tout une référence dans la mesure où bon nombre de ses tutoriels présentent tout un tas de mauvaises pratiques. De plus, la grande majorité des utilisateurs qui se trouvent sur le SdZ ne sont que des débutants qui n'ont que très peu d'expérience avec PHP, ne suivent pas forcément des études en informatique et qui sont encore moins en environnement professionnel. Donc, ils ne peuvent pas être en mesure de donner des réponses de qualité suffisante lorsqu'il s'agit de répondre à ce genre de problématiques. Le SdZ, c'est bien pour débuter et jouer aux billes dans son coin mais surtout pas pour faire du développement de qualité et professionnel.

Bref, pour répondre à ta question, tes méthodes posterNews(), updateNews() et deleteNews() n'ont pas de grandes raisons à être implémentées dans ta classe NewsManager. Ta classe NewsManager ne devrait principalement servir qu'à faire des finders (méthodes statiques pour permettre de retrouver et hydrater des objets News en fonction de critères) ainsi qu'une méthode statique delete() pour faire de la suppression multiple d'objets News.

Mais la mise à jour et la création d'un objet News doit se faire dans la méthode save() de ton objet News comme ci dessous :

<?php $news = new News();$news->setTitle('Ma super news');$news->setBody('Contenu de ma super news');$news->setIsPublished(true);$news->save(); // Création de ma news en BDD $news->seTitle('Un nouveau titre');$news->save(); // Edition, je viens de mettre à jour le titre $news->delete(); // Suppression de la news de la BDD $autreNews = NewsManager::findById(35);echo $autreNews()->getTitle(); // Retourne le titre de la news d'ID 35 // Suppression multiple des news d'ID 35, 41, 42 et 56NewsManager::delete(array(35, 41, 42, 56));

++

 
Par saturn1  -  Le 18/01/2009 14:50  -  Haut de page  - 

Ok merci...

Et en quoi est-ce grave de mettre une méthode dans la mauvaise classe?

Merci

 
Par Emacs  -  Le 18/01/2009 14:55  -  Haut de page  - 

Ce n'est pas grave mais c'est juste qu'il faut réfléchir à où doit aller chaque chose. Si par exemple tu as une classe A et une classe B, et que la classe A contient beaucoup de code alors que la classe B ne contient presque rien, c'est probablement qu'il y'a quelque part une mauvaise organisation du code.

 
Par Emacs  -  Le 18/01/2009 14:57  -  Haut de page  - 

Avant de coder la moindre ligne de PHP et de SQL, commence par poser sur papier les actions que peuvent faire chaque entité. Ca t'aidera ainsi à déterminer dans quelle classe tu devras implémenter le code par la suite.

Es-tu allé voir le site du projet Doctrine ?

 
Par saturn1  -  Le 18/01/2009 15:07  -  Haut de page  - 

La je fouille sur le site de Doctrine...

Mais je suis d'accord qu'un Admin peut avoir toutes les méthodes telles que RédigerNews...

Mais alors à quoi sert les classe de type NewsManager... :S

 

Merci :)

 
Par Emacs  -  Le 18/01/2009 15:11  -  Haut de page  - 

Je t'ai dit qu'elle servait à faire des finders et suppressions multiples. Dans Doctrine, il s'agit des classes suffixées par *Table. Par exemple : NewsTable, ArticleTable, UserTable...

 
Par saturn1  -  Le 18/01/2009 15:16  -  Haut de page  - 

Ah bon...:S moi les finders telles que les hydrateFromArray je le met dans la classe News...:S

Sinon une suppression multiple je ne vois pas trop à quoi cela sert car on veut rarement supprimer 5 news si ce n'est que par mesure de sécurité.

Par contre Doctrine je n'ai pas très bien compris à quoi cela sert.

PS : je sais je suis un gros fénéant .. :p . Mais c'est dingue quand tu sors du sdz tu crois tout connaître mais en faite tu connais rien.. mdr :p

 

Merci de tes claires explications, et sinon tu donnes plus en plus envie de rentrer dans des boulots compliqués comme développeur chez symphony car sinon ce qui m'attend c'est développer des sites au blacks avec un code tout moche derrière :p.

 
Par Emacs  -  Le 18/01/2009 15:36  -  Haut de page  - 

hydrateFromArray() n'est pas un finder ! Un finder c'est une méthode qui prendre des paramètres et qui en fonction de ces paramètres te retourne 1 ou plusieurs objets proprement hydratés.

Une suppression multiple peut servir lorsque tu fais des tâches automatiques (Cron Jobs) pour nettoyer de temps en temps ta base de données des enregistrements périmés comme des logs par exemple.

Ce n'est pas en allant sur le SdZ que tu apprendras grand chose. Le développement professionnel d'applications Internet n'a rien à voir avec ce que tu vois sur le SdZ. Etre développeur ou plus généralement informaticien demande d'avoir fait des études dans le domaine, d'être autodidacte et surtout de pratiquer beaucoup et de se mettre à jour. Mais le métier de l'informaticien c'est aussi de connaître les meilleures pratiques de programmation (conventions de nommage, frameworks, design patterns, refactoring de code, MVC, tests unitaires et fonctionnels...) et méthodologies de projet (Cycles de développement en Cascade, Scrum, RAD, eXtreme Programming...). Etre un bon professionnel en développement informatique, c'est un tout. Il ne faut pas savoir qu'aligner des lignes de code car ce n'est pas ce qui fait le potentiel et la valeur ajoutée du gars. Un bon développeur c'est quelqu'un :

  • qui sait d'abord réfléchir avant de coder,
  • qui sait modéliser son application,
  • qui a une culture informatique étendue,
  • qui connaît les bonnes pratiques de développement et les méthodologies de projet informatique,
  • qui sait s'exprimer à la fois techniquement et de manière non technique,
  • qui sait écrire du code organisé et documenté,
  • qui teste unitairement et fonctionnellement son code,
  • qui sait choisir les bons outils pour ses projets,
  • ...

Donc clairement, ce genre de choses tu ne l'apprendras ni sur le SdZ, ni sur Apprendre-PHP. Le métier de développeur s'apprend dans un premier temps en faisant des études en informatique, en se documentant par soi même mais surtout en expérimentant et en mettant ses compétences à l'épreuve dans le milieu professionnel.

Pour commencer, je t'invite à te documenter ailleurs que sur le SdZ car tu n'apprendras pas réellement de choses intéressantes et utiles en milieu professionnel. Tu peux te documenter sur des sites professionnels comme PHPFrance ou Developpez.com, ainsi que sur des blogs mais aussi en ouvrant des livres d'informatique. C'est l'un des meilleurs moyens pour apprendre par soi même ;)

 
Par saturn1  -  Le 18/01/2009 16:11  -  Haut de page  - 

Bien évidemment que coder bien ne se fait pas en un claquement de doigt...

Mais bon sur chaque site il y a des choses bonnes à prendre.

Cependant j'ai voulu acheter un livre sur la programmation orienté objet mais je trouve que le niveau est assez relevé.

Comme on dit "Il y a coder et coder" ==> Phrase à fortes nuances car si au delà de la fonctionnalité du code il y a tout le "derrière" qui fait la différence entre un codeur et un codeur.

 

Sur ceux bonne journée !!

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |