Organisation d'une classe - Demande de conseils

Petit nouveau ! | 3 Messages

24 sept. 2010, 15:15

Bonjour,

Je suis novice dans la POO, mais j'ai déjà codé quelques classes. Je suis sur un gros projet et mes premiers problèmes arrivent.

Je souhaite faire une classe "Membre".

Voilà le code simplifié :

Code : Tout sélectionner

class Membre { //Attributs //Function connexion //Function deconnexion //Function validerCompte //Function recevoirMailValidation //Function changerPass //Function changerMail //Etc }
Est-ce une bonne base ? Les requêtes seront gérés par un objet pdo. On m'a dit que je ne devais pas mettre les méthodes connexion et deconnexion dans cette classe, je comprends pas pourquoi, pour moi elles doivent être ici.

Qu'en pensez-vous ?

Merci d'avance

Mammouth du PHP | 19672 Messages

24 sept. 2010, 15:40

Le conseil est avisé : tu devrais créer une classe de connexion à part et en passer l'instance au constructeur de ta classe membre : dans ce cas, les méthodes en disposeraient mais tu ne mélangeras pas les genres.

Une classe ne fait qu'une seule chose, ne traite qu'une seule sorte de données, et le fait bien. Gérer une entité/groupe de données comme ici « membre », c'est une chose, gérer la connexion à un SGBD, c'en est une autre.

Et puis en fait, si tu y réfléchis un petit peu : ton application doit traiter d'autres types de données : si tu crées d'autres classes du même ordre que ta classe membre, penses-tu qu'il serait rationnel de répéter dans toutes le code de connexion à ton sgbd ? Ça va être sympa si tu dois changer les paramètres de connexion et que tu as 200 classes de traitement à mettre à jour ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 3 Messages

24 sept. 2010, 16:45

Merci pour ta réponse :)

Donc 2 classes : connexion et membre.
Une fois la connexion établit, je créer un nouveau membre. C'est vrai que c'est bien plus logique comme ça.

Par contre, pas de soucis pour les autres méthodes ? Par exemple changerPass() doit bien être dans la classe Membre ? Je fais passer l'objet pdo en paramètre.

Mammouth du PHP | 19672 Messages

24 sept. 2010, 16:54

Ben pour ta classe, commence par définir les propriétés : la liste te guidera plus sûrement sur la définition des méthodes. Ces propriétés sont quoi ? à priori je dirais d'abord les colonnes de tables correspondantes, ensuite ton instance de connexion. Et éventuellement d'autres éléments qui se révèleront nécessaires.

Ce qu'il y a, c'est que ta classe de connexion devra avoir des méthodes publiques pour qu'elles puissent être appelées depuis l'extérieur : ta classe membre recevra en effet cette instance en paramètre, elle n'en héritera pas et il n'y a pas de raison technique valable pour qu'elle le fasse. Et dans ce cas, dans tes méthodes, tu auras des lignes du genre $this->_cnx->execute('...');
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 3 Messages

24 sept. 2010, 19:18

Merci pour tous ces conseils :)