Page 1 sur 1

Conception de classes

Posté : 11 mai 2011, 10:30
par albius
Bonjour/ bonsoir,

Je me retrouve devant un questionnement quant à l'écriture d'un classe ou des classes. J'ai un utilisateur qui doit pouvoir ajouter/ modifier/ supprimer un produit ainsi qu'une fiche. Trois fonctionnalités dupliquées, mais qui vont s'appuyer sur deux tables différentes dans la base (produits et fiche_production)
Selon vous, comment je pourrai gérer cela d'un point de vue de l'écriture ? Créer une classe avec les trois fonctionnalités pour les produits, puis une deuxième pour les fiches ? Ou créer une classe générique que j'étendrai par la suite pour chaque table ?
merci,

Re: Conception de classes

Posté : 11 mai 2011, 10:31
par stealth35
c'est la qu'intervient l’héritage et l’abstraction
http://php.net/manual/fr/language.oop5.abstract.php

Re: Conception de classes

Posté : 11 mai 2011, 17:28
par albius
Intéressant. Mais si je comprends bien, l'abstraction de classe sert avant tout à écrire, dresser un plan d'ensemble de classes (?)
Dans mon esprit, j'étais plus parti sur une classe générique comportant des helpers, que j'aurais ensuite étendue par d'autre classes. Mais cela suppose à la base un code nettement plus compliqué (enfin, à mon niveau...)

Re: Conception de classes

Posté : 11 mai 2011, 19:25
par stealth35
ça sera plus dur a maintenant une classe générale/helpers, de plus si tu les fait hériter les classes auront des fonctionnalité donc elles ne se servent pas

l'exemple des table est très bien, puisque certaine actions sont partagé (findAll, find, insert...)

l’abstraction c'est plus qu'un plan (un plan serait plus une interface), c'est un classe parente mais qui ne peu pas être appeler et qui force certaines actions.

Re: Conception de classes

Posté : 13 mai 2011, 14:05
par Maskime
Hello,

C'est aussi une question de goût, de style et de besoin...
Personnellement je suis pas grand fan de tout ce qui est "SUPER" générique pour la simple raison que souvent il n'y a que la personne qui est à l'origine de la conception qui est capable de savoir comment ça marche... (Et souvent les petits trucs et astuces pour que le tout fonctionne de manière optimisée.)
La question est surtout de savoir si tu penses que tu auras toujours 2 tables ou si ton système est appelé à évoluer.

Il faut rester pragmatique et efficace, ça sert à rien de chasser une mouche avec un bazooka. S'il est appelé à évoluer tu peux commencer à te poser des questions sur comment monter toute ta mécanique (personnellement je m’orienterais vers de la composition plutôt que de l'héritage, mais c'est surtout une question de goût/habitude).

Tout ce que je peux te dire c'est qu'il n'y a jamais de conception parfaite, il faut jongler avec les 3 paramètres de la conception : Maintenable, Propre et Performant.

Re: Conception de classes

Posté : 16 mai 2011, 14:47
par albius
Hello,

Merci pour ton point de vue Maskime. Mais qu'appelles-tu de la 'composition' ?

Re: Conception de classes

Posté : 17 mai 2011, 11:35
par Maskime
Hello,

Alors que j'étais en train de te rédiger la réponse qui me semblait la plus pertinente, je me rends compte qu'en PHP y a pas besoin de faire tout ce ramdam...

Donc je me range à l'avis de stealth35 et te redirige vers une solution avec une classe abstraite... :oops:

Mais pour répondre à ta question la composition consiste à avoir un membre dont le type est celui dont ta classe aurait du hériter. Ceci évite d'avoir des comportements définis de manière permanente pendant le codage et permet de les gérer pendant l'exécution du script.

Re: Conception de classes

Posté : 17 mai 2011, 15:35
par albius
Merci pour ces éclairages !