Conception de classes

Eléphant du PHP | 226 Messages

11 mai 2011, 10:30

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,
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

ViPHP
ViPHP | 5462 Messages

11 mai 2011, 10:31

c'est la qu'intervient l’héritage et l’abstraction
http://php.net/manual/fr/language.oop5.abstract.php

Eléphant du PHP | 226 Messages

11 mai 2011, 17:28

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...)
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

ViPHP
ViPHP | 5462 Messages

11 mai 2011, 19:25

ç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.

Eléphant du PHP | 92 Messages

13 mai 2011, 14:05

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.
Programmer c'est 20% de syntaxe pour 80% de réflexion et dans les 20% de syntaxe il faut encore compter une bonne dose de réflexion...
Je vous donne des conseils, pas des solutions toutes faites...

Eléphant du PHP | 226 Messages

16 mai 2011, 14:47

Hello,

Merci pour ton point de vue Maskime. Mais qu'appelles-tu de la 'composition' ?
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

Eléphant du PHP | 92 Messages

17 mai 2011, 11:35

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.
Programmer c'est 20% de syntaxe pour 80% de réflexion et dans les 20% de syntaxe il faut encore compter une bonne dose de réflexion...
Je vous donne des conseils, pas des solutions toutes faites...

Eléphant du PHP | 226 Messages

17 mai 2011, 15:35

Merci pour ces éclairages !
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.