|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Inscription : juin 2006 Messages : 6 ![]() |
Bonjour,
J'ai créé un site avec consultation d'une base de données. Je decouvre actuellement php et mysql aussi mon travail n'est il pas pertinent. J'ai décidé de revoir mon travail et c'est durant cette revision que l'envie d'utiliser des classes m'est venue. Je tiens, a ce niveau, a preciser que mon site n'a aucune finalité si ce n'est me faire decouvrir php. Mon probleme, quant a lui concerne la conception même des classes que je souhaiterai utiliser : mon manque d'experience ou mes difficultés a cerner mon probleme font que je ne trouve pas de doc donnant une methode complete de la marche que j'aimerai suivre. Même si certaines m'ont donné des pistes de reflexions interessantes je me trouve actuellement a critiquer l'utilité de telles classes (car je ne comprends pas tout ^^) Mon post est assez long j'en suis desolé, je vais presenter une page que je possede. l'utilisation d'une classe pour cette page et m'arreterai la pour ne pas devenir trop illisible : une de mes pages consulte une table de ma base et affiche et mets en page tous ses champs : Code :
Admettons que je souhaite créer une classe partenaire, quelles sont les questions a se poser? dois je créer une classe correspondant a tous les champs de la table que je stockerai ds un tableau parcouru par les methodes de la base? (ça me parait moche et je pense mal formuler l'idée.) A l'heure actuelle je pense a quelque chose ressemblant a ceci : Code :
Comment savoir que tous mes partenaires ont été bien affiché ? Code :
Je m'arrete la en remerciant ceux qui ont lu jusqu'au bout (en esperant etre interessant) N'hesitez pas a critiquer ou commenter ce que je viens d'ecrire cela m'aiderai beaucoup. Merci d'avance. |
||||||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : février 2005 Messages : 1 791 ![]() |
Salut,
si tu veux vraiment programmer objet je pense qu'il faut que tu partes encore de plus générique. Perso j'ai développé des classes dont je me sers partout : SqlRecord (enregistrement SQL) SqlRecordsSet (ensemble d'enregistrements SQL) L'intérêt et qu'ensuite tu les étends et tu te retrouves à juste modifier des affichages ou des formulaires, toutes les opérations SQL existent déjà dans les classes mères (enfin dans l'idéal ^^). Voici leurs structures simplifiées : Code :
class Partenaire extends SqlRecord class PartenairesEnsemble extends SqlRecordsSet class Client extends SqlRecord etc. En plus de la réutilisabilité du code cela facilite également la maintenance. Mettons que t'aies oublié de traiter les injections sql, tu as juste à modifier ta fonction sqlSelect() et c'est bon. |
||
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : juin 2006 Messages : 6 ![]() |
Merci pour ta reponse mais je m'interroge encore :
chaque classe enfant heritera donc du tableau $field et aura la methode getfield et affichage (voir plus bas, c'est une methode que j'ai ajouté) c'est bien ça ? De plus cela ne pose t'il pas probleme le fait qu'elles soient autant generaliste? Elles semblent permettre les insertions, modification... Partons du principe que les insertions ne sont permises que dans un module admin ne vaudrait il pas mieux créer une autre classe gerant ces details de maintenance? Idealement je permettrai a ces classes de consulter ma base (select) et eventuellement de formater un certain affichage (avec la methode affichage dont je parlais) et celles du module admin a faire le reste. Je me permets de reprendre et adapter mon exemple sur SqlRecord : Code :
Code :
function SqlRecord($table = null, $key = null) {} C'est une methode de l'objet. Mais que consulte t'elle? elle refait une connexion a la base en utilisant le contenu de $table et $key et en ajoutant un where? Donc par exemple je peux instancier un objet correspondant au partenaire 1. Et avec cette methode verifier (en resortant le champ de la base) si son nom est COFADAS par exemple (where nom_part=COFADAS). Si c'est bien cela, alors je ne comprends pas trop l'interet. Je possede getField et je peux l'utiliser pour prendre les clefs de $field comme critere. la methode SqlSelect n'est elle pas plus pertinente dans la classe SqlRecordSet et inutile ici? Mon post va devenir indigeste si je continue. Je posterai plus tard ce que j'ai compris de ta solution adapté a mon exemple. |
||
|
|
00
|
|
|
#4 | |||
|
Membre Expert
![]() Inscription : février 2005 Messages : 1 791 ![]() |
Au niveau du découpage, tu peux effectivement faire plus propre en créant une classe d'enregistrement en lecture seule et une en lecture/écriture qui l'étend (tu auras un petit gain de mémoire de quelques octets pour les pointeurs de fonctions, par contre niveau de la sécurité ca changera rien) :
Code :
Le constructueur ne fait aucune opération SQL, il sert juste à définir la table et/ou la clé. C'est sqlSelect() qui s'occupe de remplir le tableau $fields. En fait sqlSelect() sert à "charger" les champs de l'objet en mémoire en faisant la requête "SELECT". getField() sert juste à récupérer un champ dans le tableau, il n'effectue aucune requête. Citation:
Comme je te le disais c'est juste un exemple, j'ai pas le code de la dernière version que j'ai faite sous les yeux mais ensuite cela devient un peu plus ardus de gérer les jointures, etc. |
|||
|
|
00
|
|
|
#5 | ||||
|
Invité de passage
![]() Inscription : juin 2006 Messages : 6 ![]() |
Voici donc (avec plein de commentaire) ce que j'ai compris :
Comme dit plus haut le php est nouveau pour moi donc tous mes posts ne sont pas la pour critiquer la methode de djakisback juste que je suis un joyeux neophyte. Je reprends ce que j'ai dit avoir compris plus haut moins mon histoire d'affichage (qu'une telle methode existe ou non n'a pas d'insidence sur la classe selon moi). Ma vision va faire subir des modifications aux exemples precedents mais c'est parce que je ne comprends pas leur fonctionnement exact. Soit : Code :
Code :
Si certaines choses sont ameliorable ou s'il manque certains principes ou idées dans mon approche n'hesitez pas a repondre ou a m'envoyer un mp. Merci d'avance edit: je viens de voir ta reponse apres mon post, j'ai ecrit cela pour rien :'( |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com