Php en poo ou procédurale ?

WRInaute passionné
Bonjour,

Je suis en train de développer un site Internet d'annonces qui sont ajoutées via un partie administration (formulaires) par des personnes ayant un compte sur le site.

Je me pose la question, sachant que je n'ai pas tellement d'expérience en programmtion objet de savoir si la poo serait adaptée pour la gestion de ce type de site.

Les données des annonces seraient stockées dans une BD et les membres les rentreraient depuis un formulaire de leur espace réservé.

Mes données des annonces peuvent donc venir de 2 origines différentes (bd et formulaire). Comment gérer le constructeur des annonces dans ce cas ?

De plus si je créé un objet membre avec la méthode : ajouterAnnonce(a,b,c,d,...) qui ajoute une annonce dans la base pour le membre auquel s'applique la méthode, je dois créer un instance d'un objet membre qui comporte pas mal de données (nom, profession...) que je n'exploite pas forcément dans tous les cas...

Bref je suis un peu perdu...

Y'a t'il des pros de la poo ?

(en fonction de l'aide apportée : partenariats, échanges de services ... possibles ;-) )
 
WRInaute accro
euh...là c'est vraiment plus compliqué que ça.


"Je me pose la question, sachant que je n'ai pas tellement d'expérience en programmtion objet de savoir si la poo serait adaptée pour la gestion de ce type de site."

La réponse est clair : oui ;) tu t'en doutais !
La POO à l'avantage d'être réutilisable n'importe où et facilement, de plus elle sera facilement modifiable si l'on veux ajouter quelques options, etc.. Enfin tout est relatif bien entendu, il faut que la class soit à la base cohérente et bien écrite.



"Les données des annonces seraient stockées dans une BD et les membres les rentreraient depuis un formulaire de leur espace réservé.

Mes données des annonces peuvent donc venir de 2 origines différentes (bd et formulaire). Comment gérer le constructeur des annonces dans ce cas ?"


Non, tes données (d'après ce que tu dis) ne viennent pas de deux sources différentes ! Le formulaire permet d'insérer des données dans la base de données et la base de données donne les informations nécessaires pour l'affichage. Donc une seule possibilité pour ajouter des informations sur le site : le formulaire.

E D I T : oh fait...
Quel langage utilisé ?
Quel version du langage ?
 
WRInaute passionné
Comme le titre l'indique c'est du php... en version 5 .

thierry8 a dit:
Non, tes données (d'après ce que tu dis) ne viennent pas de deux sources différentes ! Le formulaire permet d'insérer des données dans la base de données et la base de données donne les informations nécessaires pour l'affichage. Donc une seule possibilité pour ajouter des informations sur le site : le formulaire.

Ben en fait, quand je disais que mes données venait de 2 sources c'est si je créé un objet "Annonce" avec les données du formulaire avec une méthode pour l'insérer dans la base ( monAnnonce->insertBd() ) et un autre constructeur qui créé un objet "Annonce" avec les données récupérées dans la bd pour l'affichage sur le site...

Ou alors si c'est un objet membre qui applique la fonction membre->insertAnnonceBd("azeaze","azeaze",...) y'a des infos de l'objet membre qui ne me sont pas nécessaires. J'ai donc peur de ralentir l'execution du script...
 
WRInaute accro
netsys a dit:
Comme le titre l'indique c'est du php... en version 5 .
Oups..en effet.

netsys a dit:
thierry8 a dit:
Non, tes données (d'après ce que tu dis) ne viennent pas de deux sources différentes ! Le formulaire permet d'insérer des données dans la base de données et la base de données donne les informations nécessaires pour l'affichage. Donc une seule possibilité pour ajouter des informations sur le site : le formulaire.
Ben en fait, quand je disais que mes données venait de 2 sources c'est si je créé un objet "Annonce" avec les données du formulaire avec une méthode pour l'insérer dans la base ( monAnnonce->insertBd() ) et un autre constructeur qui créé un objet "Annonce" avec les données récupérées dans la bd pour l'affichage sur le site...

Ou alors si c'est un objet membre qui applique la fonction membre->insertAnnonceBd("azeaze","azeaze",...) y'a des infos de l'objet membre qui ne me sont pas nécessaires. J'ai donc peur de ralentir l'execution du script...
Il faut bien créer (enfin il faut, on peut faire comme on veut hein !) une class, avec des méthodes différentes, en l'occurence une pour l'insertion et l'autre pour extraire les données nécessaires à l'affichage.

Je ne comprends pas bien ce que viennent faire les informations membres dans cette class ???
 
WRInaute passionné
Ok, donc comme ca c'est mieux monAnnonce->insertBd()

J'ai encore un petite question qui me travaille :

Si j'ai 2 gabarits de pages : Listing d'annonces et Fiche annonce
dans listing d'annoce je me retrouve avec un tableau d'objet annonce mais je ne vais pas exploiter dans mon listing toutes les infos des objets annonces qui seront affichées plutôt dans la fiche.
Ca me gene un peu de créer un objet dont je n'utiliserais pas toutes les données dans certains cas. Dois-je créer un objet annonceMini dans le cas du listing ?

Quel est le mieux pour ce type de projet ? poo ou procédurale ? :
- d'un point de vue conception
- d'un point de vue charge serveur et rapidité d'execution
 
WRInaute discret
Je dirais plutôt :
$listing->insertAnnonce(...)

Et pour 2 pages, tu utiliserais :
Pour le listing :
$listing->Afficher( )
Pour la fiche :
$annonce->Afficher( )

Un projet comme celui-ci est faisable en procédurale. Je pense même que ca doit se coder plus rapidement en procédurale.
Mais en objet ton code sera plus évolutif, plus réutilisable... Au niveau de la charge du serveur, il ne doit pas y avoir beaucoup de différence.
 
WRInaute passionné
haute-definition.info a dit:
Je dirais plutôt :
$listing->insertAnnonce(...)

insertAnnonce c'est pour la ajouter les l'annonce dans la BD.
je vois pas trop en quoi cela concerne un objet listing qui est plus significatif pour l'affichage. je peux très bien faire monAnnonce->insertBd() !?

haute-definition.info a dit:
Et pour 2 pages, tu utiliserais :
Pour le listing :
$listing->Afficher( )
Pour la fiche :
$annonce->Afficher( )

Concernant l'objet listing, ca décale juste le problème car listing est un objet contenant une liste d' (objets) annonces; Mais dans mon listing j'ai pas besoin de toute les données des objets Annonce...
 
WRInaute discret
Tu peux faire monAnnonce->insertBd.
Ce que je voulais dire, c’est que tes membres veulent ajouter leur annonce dans le listing, l’insertion dans la base c’est ton implémentation.

Tu n’es pas obligé d’avoir la liste d’annonces dans l’objet listing. Tu peux juste faire une requête pour récupérer les infos dont tu as besoin au moment de l‘affichage.
 
WRInaute passionné
haute-definition.info a dit:
Mais en objet ton code sera plus évolutif, plus réutilisable... Au niveau de la charge du serveur, il ne doit pas y avoir beaucoup de différence.

Effectivement, ce n'est qu'un choix de conception.

Cela peut par contre rendre plus intuitif l'utilisation du cache qui lui va jouer sur la charge serveur.

C'est l'utilisation de fonctions générant mon cache qui me donne envie de passe en POO depuis un bout de temps, puisqu'il m'oblige à penser en "objet".

J'en ai un peu fait en C++ par le passé, et j'avais vraiment trouvé ça très puissant...
 
WRInaute accro
Fab le Fou a dit:
J'en ai un peu fait en C++ par le passé, et j'avais vraiment trouvé ça très puissant...

C'est très puissant, il suffit juste de savoir ce servir de l'outil.

Mieux vaut rester en procédurale si l'on ne maîtrise pas la POO, du moins ces bases..
Sinon, cela peut effectivement tourner au désastre et la plus aucun gain, aussi bien en terme de fiabilité/rapidité, facilité de réexploitation, etc...
 
WRInaute passionné
thierry8 a dit:
Mieux vaut rester en procédurale si l'on ne maîtrise pas la POO, du moins ces bases..
Sinon, cela peut effectivement tourner au désastre et la plus aucun gain, aussi bien en terme de fiabilité/rapidité, facilité de réexploitation, etc...

Sage conseil, surtout si le but est de mettre le site en production.
 
WRInaute passionné
haute-definition.info a dit:
l’insertion dans la base c’est ton implémentation.

Oui mais autant utiliser l'objet et ses méthodes.

Bon ben du coup je ne sais toujours pas quelle implémentation, poo ou procédurale, utiliser :cry:
 
WRInaute passionné
J'ai définie un mini cahier des charges avec les fonctionnalités

J'ai définie la charte graphique générale et de quelques gabarits.

J'en suis à choisir la manière d'implémenter la partie d'administration pour les membres et l'exploitation des données sur le site. J'ai envie de faire les choses de manière propre (en terme de rapidité d'execution et de sécurité). J'ai étudié la poo mais de la à l'utiliser pour des projets comme celui que je voudrai faire, j'aurai pas mal de chose à apprendre.

Alors comme dit si je peux trouver quelqu'un qui puisse me donner des pistes et comme dit en fonction de l'aide apportée il y a possibilité de partenariats et d'échanges de services...
 
WRInaute passionné
juste pour me faire une idée, tu pourrais poster les interfaces de tes classes qui manipulent les tables membre et annonce.
 
WRInaute passionné
Je vais devoir les écrire alors.... :roll:

Je posterai ca dès que j'aurai quelques choses de compréhensible.
 
WRInaute passionné
netsys a dit:
Je vais devoir les écrire alors.... :roll:

Je posterai ca dès que j'aurai quelques choses de compréhensible.

Ne les écrit pas juste pour les poster sur le forum !

Tu sais une interface c'est un truc aussi simple que ça :
Code:
public interface UserDAO extends DAO {
    /**
     * Gets users information based on login name.
     * @param username the current username
     * @return user populated user object
     */
    public User getUser(String username);

    /**
     * Gets a list of users based on parameters passed in.
     *
     * @return List populated list of users
     */
    public List getUsers(User user);

    /**
     * Saves a user's information
     * @param user the object to be saved
     */
    public void saveUser(User user);

    /**
     * Removes a user from the database by id
     * @param username the user's username
     */
    public void removeUser(String username);
}

Pour en revenir à ton projet, je ne suis pas vraiment sûr que tu sois vraiment prêt pour te lancer dans un projet en OO.
Si ton projet est important et que tu doit passer en production pourquoi ne pas rester en procédural ?

Tu peux très bien coder proprement et de manière sécurisé sans être obligé de passer en OO.

Il est facile de planter un projet informatique, il est encore plus facile de planter un projet OO avec une mauvaise analyse, il est extêmement facile de planter un projet en se lançant avec des technos que l'on maîtrise mal.
 
WRInaute passionné
Ok merci, donc mes cours de poo ne serviront jamais alors... ou juste à instancier un objet voiture, à allumer le moteur, rouler quelques km avec et arreter le moteur :cry:

Je deconne mais c'est un peu la cas quand meme.
 
WRInaute discret
Tu pourrais utiliser la POO juste pour gérer les accès à la base de donnée, ou bien juste pour gérer l'accès des pages par les membres. L'idée étant de minimiser le couplage dans le système afin de faciliter les modifications.

Exemple: tu as une classe usager:

Code:
class Usager{
var $tabusager = array(); // tableau qui contiendre les infos de l'usager

function Usager(){
//recuperer les infos du membre et le mettre sur le tableau $tabusager
}

function est_connecte(){
if($tabusager["username"])
return true;
else
return false;
}

function est_admin(){
if($tabusager["admin"]==1)
return 1;
else return 0;
}

function recuperer_pseudo(){
if($tabusager["username"])
return $tabusager["username"]);
else
return "Invité";
}

}

ensuite dans ton code, tu instancie la classe Usager:

Code:
$bonhomme = new Usager();

if($bonhomme->est_connecte())
... traitement....

if(bonhomme->est_admin())
... traitement....

echo bonhomme->recuperer_pseudo();

L'avantage c'est que si un jour tu changes complètement ton système de login, t'auras juste à modifier ta classe usager. Le reste ne changera pas.
 
WRInaute passionné
Merci pour l'exemple...

J'utilise déjà des classes pour la gestion de la bd avec une classe sur le principe du signleton qui etend mysqli et qui ne me fait qu'une connexion à la base dans tout le script.

Après pour modéliser mon système c'est une autre histoire...

Mais je pense vu les conseils coder en procédurale.
 
WRInaute passionné
netsys a dit:
Ok merci, donc mes cours de poo ne serviront jamais alors... ou juste à instancier un objet voiture, à allumer le moteur, rouler quelques km avec et arreter le moteur :cry:

Je deconne mais c'est un peu la cas quand meme.

Je n'ai pas dit ça. C'est aussi une question de priorité. La priorité pour toi aujourd'hui, c'est de sortir un projet opérationnel, non ?
Entraîne-toi a OO sur des projets perso.
 
WRInaute passionné
C'est un projet perso justement. Mais c'est pas parce que c'est perso que le projet ne doit pas être au top.

Merci pour vos conseils !

Je posterai d'ici quelques temps (1 mois j'espère) l'adresse du site en question pour voir la finalité de tous ces posts.
 
Discussions similaires
Haut