Post by Olivier MassonPost by Bruno DesthuilliersPost by Olivier MassonPost by Bruno DesthuilliersProblème de conception assez courant hélas consistant à abuser de
l'héritage au lieu de réfléchir. Après, sans connaître le contexte, pas
moyen de dire quelle serait la bonne solution, mais à vue de nez on
pourrait penser aux patterns "décorateur" et "stratégie".
Bien entendu, j'ignore ce que sont ces patterns.
C'est relativement documenté sur le net.
Le pattern stratégie consiste à déléguer une partie déterminée du
comportement à un autre objet (ou à une fonction de rappel pour ce que
ça vaut), généralement spécifié(e) à l'instanciation. Ca permet de
"plugger" des comportements différents sans devoir toucher à la classe
de base ou créer une nouvelle sous-classe.
Le pattern décorateur consiste à ajouter/adapter les fonctionnalités
d'un objet en le décorant dans un autre objet (compatible du point de
vue de l'API of course), le quel délèguera une partie du travail à
l'objet d'origine.
Très intéressant, même si j'ai dû couper la musique pour me concentrer :)
Mais j'ai une question plus générale à te poser : tu sembles (j'ai
appris à prendre du recul et à tout relativiser) avoir de solides
connaissances en développement.
Tu a bien raison de relativiser.
Post by Olivier MassonPar contre, le moindre micro-projet parait être une montagne de
complexité avec ton savoir-faire (car il faut, entre autres, tout
concevoir à la (ta ?) perfection et avec une vision sur le long terme).
Non. Contrairement à ce que tu sembles croire, je suis pour les
solutions simples (disons "aussi simples que possibles"), et ça fait
bien longtemps que j'ai cessé de croire qu'on pouvait "tout concevoir à
la perfection". Quand à la "vision sur le long terme", la mienne se
restreint généralement à essayer de finir le projet avec pas trop de
retard et pas trop de conneries dedans.
Post by Olivier MassonCertes, peut-être pas pour toi qui a l'habitude,
Effectivement, l'expérience aide à éviter dès le départ certaines
vieilles erreurs. Ca n'empêche pas d'en faire de nouvelles, hélas :-/
Post by Olivier Massonmais pour le
commun-des-mortels-qui-développent-déjà-un-tout-petitpetit-peu que je
suis, c'est plutôt abscons et très théorique.
Crois moi, quand tu a été confronté plusieurs fois au même problème, ça
n'a plus rien de théorique.
Post by Olivier MassonCe qui m'a séduit il y a peu, parce que j'essaie de l'appliquer depuis
fort longtemps, c'est le concept de méthode agile - oui, cela devient
très "tendance" et donc probablement surestimé -.
Possiblement, mais il y a quelques considérations pleines de bon sens là
dedans, spécialement pour des petits projets avec des petites équipes,
des deadlines serrées, et des spécifications "flottantes" - donc une
bonne partie du développement web.
Par contre, et on le soulignera jamais assez, ces méthodologies ne
peuvent fonctionner correctement que pour des équipes composées
majoritairement de personnes expérimentées.
Post by Olivier MassonOr, j'ai *l'impression* que tu en es à l'opposée. Est-ce que je me
trompe ?
Oui.
Le fait d'utiliser par exemple un pattern décorateur (pas forcément de
façon "canonique" d'ailleurs - ce sont des motifs de *conception*, pas
d'implémentation) plutôt que l'héritage dans un cas comme celui que tu
soulèves ne relèves pas du BigDesignUpFront - c'est le genre de choix
qui s'impose d'eux-mêmes pendant le développement quand on connait le
problème et la solution. C'est à peu près aussi naturel que de
factoriser le code commun dans une fonction (ou méthode) quand on voit
qu'on est en train de se répéter et que cette répétition n'est pas
accidentelle.
Post by Olivier MassonPenses-tu que tes méthodes soient adaptées à un projet de
taille minuscule, modeste, moyenne ?
La plupart des projets sur lesquels je bosse sont de taille suffisament
modeste pour qu'un seul dév y soit affecté. Sur les plus gros, on est
deux dév... Quant à mes méthodes, au final, ça se résume à ça:
http://www.cafenware.com/la-rache/index.php?z=2
Post by Olivier MassonL'argument "tu ne sais pas ce que ton projet sera demain", je le
comprends,
En ce qui me concerne, c'est un excellent argument pour ne PAS partir
dans des trucs inutiles. Par contre, ça n'implique pas de laisser son
cerveau au vestiaire. Ce n'est pas parce que je ne sais pas comment le
projet va évoluer que je ne vais pas essayer d'avoir ajourd'hui une
solution raisonnablement propre.
Post by Olivier Massonmais il est parfois beaucoup plus productif (et rentable,
efficace...) de faire un projet à sa juste mesure puis, si besoin est,
repartir en partie ou en totalité à zéro, avec une méthode adaptée à la
nouvelle importance du projet.
Oui et non. Je n'essaie pas de faire plus que ce qu'il y a dans les
specs, justement parce que je n'ai aucune idée de comment le projet va
être amené à évoluer (et qu'à chaque fois que j'ai essayer de deviner,
je me suis planté). Par contre, par expérience, garder son code
raisonnablement propre et factorisé, avoir un schéma de données
normalisé et correspondant au problème à résoudre, etc etc, ça rend
service quand les premières demandes d'évolutions arrivent.
Post by Olivier MassonÇa me fait un peu penser à MVC que j'avais, il y a encore peu de temps,
honte de ne pas utiliser.
Finalement, maintenant que je fais parfois mon propre MVC, je suis tout
à fait convaincu que cette structure n'a rien d'idéale (et il m'arrive
donc de l'utiliser uniquement sur des parties de site).
Je vais (encore...) faire figure de puriste pédant, mais parler de MVC
pour du dev web est assez inapproprié - l'architecture MVC (la vraie)
concerne les GUI traditionnels, et réponds à des besoins (et à un modèle
d'exécution) très différents.
Maintenant, l'approche consistant à séparer autant que possible les
trois composants que sont #1 la logique applicative, #2 la gestion des
actions de l'utilisateur et #3 la logique de présentation, est
globalement une approche plutôt saine quelque soit le contexte.
Note cependant que rien de tout ça ne requiert de faire de la POO ni de
partir dans des délires d'"architecte astronaute". On peut appliquer
cette approche *très* simplement en bon vieux PHP procédural à la papa.
On n'a pas attendu la POO pour faire du code modulaire, tu sais ?
De quoi ?-)
Post by Olivier MassonTout ceci est important pour moi car on ne lit que rarement sur le net
des propos nuancés,
Au risque de te décevoir, je ne suis pas spécialement connu pour mon
sens de la nuance, loin s'en faut !-)