poo et insertion bdd

d0m
Mammouth du PHP | 1141 Messages

20 mai 2008, 13:39

salut,

j'aimerais quelques avis sur la modelisation que j'utilise :

disons que par exemple j'ai des films à gérer.
d'un coté j'ai la bdd mysql avec un objet base_mysql qui gère la connection, l'exécution de requêtes etc...
de l'autre des objets films avec des proprietes.

vient le moment ou j'ai besoin d'insérer les films créés dans la bdd.

jusqu'à maintenant sans poo j'utilisai des fonctions genre :
inserer_film(titre,auteur,....){
  //requete sql d'insertion
}
j'aimerais incorporer ces fonctions dans le modèle objet.

Dans ce cas il faudrait que cette fonction soit une fonction de l'objet base_mysql ou de l'objet film?
je pencherai plutôt pour l'objet base_mysql mais j'ai un doute car l'objet à force va contenir beaucoup de fonctions d'insertion...

Eléphant du PHP | 185 Messages

20 mai 2008, 14:01

Dans film, mais dans une méthode statique. ;)

d0m
Mammouth du PHP | 1141 Messages

21 mai 2008, 19:33

merci pour ta réponse.

j'ai une question, pourquoi une méthode statique ?

Mammouth du PHP | 19672 Messages

21 mai 2008, 20:25

Où est ta méthode d'insertion ? Dans la classe film ? ou dans ta classe mysql ? Est-ce que ta classe film étend la classe mysql ?

Techniquement ce que je verrais, c'est que film étende mysql, que lorsque tu crées une instance de film, l'héritage créant une instance de mysql déclenche la connexion et que tu fasses appel à ta méthode d'insertion qui est dans film. Il peut y avoir des variantes, mais grosso-modo, c'est un problème d'héritage que je verrais là.

Quant à l'idée de la méthode statique, je n'en vois pas l'intérêt :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

d0m
Mammouth du PHP | 1141 Messages

21 mai 2008, 20:43

pour l'instant j'ai mis ma méthode d'insertion dans la classe film, cette méthode prenant en argument la connexion mysql. Quelque chose de ce genre :
public function inserer_bdd($connexion){
	$connexion->query("INSERT INTO films (titre)
					  VALUES	('".$this->titre."'));
}
Par contre faire heriter la classe film de mysql me semble étrange, déjà conceptuellement un film contiendrait des attributs propres à la base de données.
Et ensuite si je fais ça pour toutes mes classes (par exemple acteurs,...) je vais me retrouver avec beaucoup de connexions crées l'une après l'autre par insertions successives...

Mammouth du PHP | 19672 Messages

21 mai 2008, 20:52

Dans ce cas, il faut gérer l'unicité de la connexion dans ta classe MySQL. Un singleton poserait problème avec l'héritage, mais il y a certainement moyen de contourner ce problème.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: