Objet: structurer son appli: un ex simple pour un débutant
Posté : 05 avr. 2008, 17:10
Bonjour à tous!
Désolé si je poste dans la mauvaise section. En fait, je suis débutant en programmation PHP, et en programmation objet également, mais ma question ne porte pas sur la syntaxe PHP, mais sur comment structurer, et organiser mon application.
J'ai farfouillé pas mal, mais je n'ai rien trouvé de clair. Je me suis renseigné sur le modèle MVC, mais ça reste conceptuel, sans donner une méthodologie pour commencer.
Comme je débute, plein de questions se posent, forcément, comme:
- quelle arborescence pour mon application, et pour quelles raisons.
- quelle organisation pour gérer l'affichage, l'accès à la BDD et mes objets.
La côté BDD ne m'a pas posé de problème, je pense avoir bien organisé mes tables.
Tout ça semble très fouilli, alors voilà les détails de ce que j'aimerais faire, et je listerais les questions qui me sont venues.
Je souhaite créer un annuaire de contacts, dans un premier temps très basique, afin de piger commetn faire, ensuite, les fonctionnalités viendront sans trop de problèmes (beaucoup de site détaillent comment coder telle ou telle fonctionnalité).
J'utilise MySQL. J'ai créé une table Contact, une table Home et une table living, dans laquelle je fais le lien entre un contact et une maison.
Contact contient: id, last_name, first_name
Home contient id, address, country
living contient id_contact, id_home
Côté classes, j'ai donc créé une classe par table (sauf la table d'association living)
Donc, classe Contact et classe Home
Contact contient:
champs:
$id
$last_name
$first_name
$home_list = array();
méthodes getId(),setId($id),getLastName(), setLastName($last_name), getFirstName(), setFirstName($first_name), getHomeList(), addHome($home),deleteHome($index),updateHome($index,$home)
Home contient:
champs:
$id
$address
$country
méthodes getId(),setId($id),getAddress(),setAddress($address),getCountry(),setCountry($country),
Ensuite, il faut bien que j'accède à la BDD. Au début j'avais mis les méthodes d'accès dans les classes, et puis finaleemnt j'ai totu sorti pour mettre dans une nouvelle classe, appelée AddressBook (déjà j'ai hésité, c'est pas très clair si les accès à la BDD doivent être centralisés dans une même classe ou bien répartis dans chaque classe qui a besoin d'y accéder, je suis preneur de vos conseils et directives!).
Donc AddressBook contient:
$user_name
$user_password
$theme
$language
$database
Donc grosso modo AddressBook contient tout ce qui est configuration (dans le constructeur, pour l'instant je fais un inclue d'un fichier de conf avec tous les paramètres et je remplis les champs)
$database est un objet de classe MySQL, classe qui contient pour l'instant simplement les méthodes connect() et disconnect()
Et ensuite j'ai rajouté toutes les méthodes d'accès la base de données dans la classe AddressBook, c'est à dire les méthodes suivantes:
addContact($contact),getContact($id),deleteContact($id),updateContact($contact) et getContactList() qui renvoie l'intégralité de la table Contact.
où toutes ces méthodes contiennent pour l'instant directement du code MySQL (je ne vois pas encore comment rendre le code indépendant de la BDD, mais pour le moment, je mets ça de côté)
En résumé, AddressBook prend et ne renvoir que des objets propres à mon appli, donc la BDD est invisible de l'extérieur d'AddresBook.
Est ce bien de faire une classe AdressBook ou bien ça n'a pas vraiment de sens? Je ne vois par ex pas si je dois mettre un champ database directement dans cette classe ou bien si je dois isntancier la BDD a l'exterieeur et la passer en paramètre pour chacun des méthodes qui y font appel.
Dernière chose, l'affichage et l'organisation du script contenu dans index.php. Là c'est le pire, c'est complètement flou.
On m'a dit de dissocier l'affichage, donc j'ai créé une classe View qui a comme méthodes:
displayContactInfo($contact)
displayContactList($list)
qui crééent le code html correspondant et font un simple echo
Ca, ça va à peu près, mais pour l'affichage de la page, les menus, le header, tout ça c'est très flou.
J'ai créé des classes header, page, footer, tableau, image, file et form, mais je vois pas trop comment je dois construire mes pages... Une instance de page qui rajoute des menus, des images, des forms et affiche le tout? qui doit appeler qui, instancier qui, et afficher qui.
pour ce qui est des formulaires, pour le moment j'ai rajouté une méthode dans la classe contact pour afficher un formulaire d'ajout de contact, mais c'est ptête pas le bon endroit...
voilà mon index.php
http://metsubo.free.fr/index.php.txt
Merci d'avance pour votre aide!!
/glattering, débutant un peu paumé.
Désolé si je poste dans la mauvaise section. En fait, je suis débutant en programmation PHP, et en programmation objet également, mais ma question ne porte pas sur la syntaxe PHP, mais sur comment structurer, et organiser mon application.
J'ai farfouillé pas mal, mais je n'ai rien trouvé de clair. Je me suis renseigné sur le modèle MVC, mais ça reste conceptuel, sans donner une méthodologie pour commencer.
Comme je débute, plein de questions se posent, forcément, comme:
- quelle arborescence pour mon application, et pour quelles raisons.
- quelle organisation pour gérer l'affichage, l'accès à la BDD et mes objets.
La côté BDD ne m'a pas posé de problème, je pense avoir bien organisé mes tables.
Tout ça semble très fouilli, alors voilà les détails de ce que j'aimerais faire, et je listerais les questions qui me sont venues.
Je souhaite créer un annuaire de contacts, dans un premier temps très basique, afin de piger commetn faire, ensuite, les fonctionnalités viendront sans trop de problèmes (beaucoup de site détaillent comment coder telle ou telle fonctionnalité).
J'utilise MySQL. J'ai créé une table Contact, une table Home et une table living, dans laquelle je fais le lien entre un contact et une maison.
Contact contient: id, last_name, first_name
Home contient id, address, country
living contient id_contact, id_home
Côté classes, j'ai donc créé une classe par table (sauf la table d'association living)
Donc, classe Contact et classe Home
Contact contient:
champs:
$id
$last_name
$first_name
$home_list = array();
méthodes getId(),setId($id),getLastName(), setLastName($last_name), getFirstName(), setFirstName($first_name), getHomeList(), addHome($home),deleteHome($index),updateHome($index,$home)
Home contient:
champs:
$id
$address
$country
méthodes getId(),setId($id),getAddress(),setAddress($address),getCountry(),setCountry($country),
Ensuite, il faut bien que j'accède à la BDD. Au début j'avais mis les méthodes d'accès dans les classes, et puis finaleemnt j'ai totu sorti pour mettre dans une nouvelle classe, appelée AddressBook (déjà j'ai hésité, c'est pas très clair si les accès à la BDD doivent être centralisés dans une même classe ou bien répartis dans chaque classe qui a besoin d'y accéder, je suis preneur de vos conseils et directives!).
Donc AddressBook contient:
$user_name
$user_password
$theme
$language
$database
Donc grosso modo AddressBook contient tout ce qui est configuration (dans le constructeur, pour l'instant je fais un inclue d'un fichier de conf avec tous les paramètres et je remplis les champs)
$database est un objet de classe MySQL, classe qui contient pour l'instant simplement les méthodes connect() et disconnect()
Et ensuite j'ai rajouté toutes les méthodes d'accès la base de données dans la classe AddressBook, c'est à dire les méthodes suivantes:
addContact($contact),getContact($id),deleteContact($id),updateContact($contact) et getContactList() qui renvoie l'intégralité de la table Contact.
où toutes ces méthodes contiennent pour l'instant directement du code MySQL (je ne vois pas encore comment rendre le code indépendant de la BDD, mais pour le moment, je mets ça de côté)
En résumé, AddressBook prend et ne renvoir que des objets propres à mon appli, donc la BDD est invisible de l'extérieur d'AddresBook.
Est ce bien de faire une classe AdressBook ou bien ça n'a pas vraiment de sens? Je ne vois par ex pas si je dois mettre un champ database directement dans cette classe ou bien si je dois isntancier la BDD a l'exterieeur et la passer en paramètre pour chacun des méthodes qui y font appel.
Dernière chose, l'affichage et l'organisation du script contenu dans index.php. Là c'est le pire, c'est complètement flou.
On m'a dit de dissocier l'affichage, donc j'ai créé une classe View qui a comme méthodes:
displayContactInfo($contact)
displayContactList($list)
qui crééent le code html correspondant et font un simple echo
Ca, ça va à peu près, mais pour l'affichage de la page, les menus, le header, tout ça c'est très flou.
J'ai créé des classes header, page, footer, tableau, image, file et form, mais je vois pas trop comment je dois construire mes pages... Une instance de page qui rajoute des menus, des images, des forms et affiche le tout? qui doit appeler qui, instancier qui, et afficher qui.
pour ce qui est des formulaires, pour le moment j'ai rajouté une méthode dans la classe contact pour afficher un formulaire d'ajout de contact, mais c'est ptête pas le bon endroit...
voilà mon index.php
http://metsubo.free.fr/index.php.txt
Merci d'avance pour votre aide!!
/glattering, débutant un peu paumé.