IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Bonne pratique POO : Où placer les fonctions communes ?


Sujet :

Langage PHP

  1. #21
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Peut être suis-je perfectionniste, mais la question étant "Bonne pratique POO", la réponse est celle détaillée ci-dessus, même si elle semble overkill, et pour les raisons expliquées.

    La question serait "Où placer les fonctions communes dans un projet PHP ?", effectivement on pourrait citer YAGNI et favoriser les statiques... Par contre il faut être assez sûr de son coup si on ne veut pas refacto le tout pas longtemps après.

    Dans ton dernier exemple alassanediakite, tu dis "rien n’empêche d'enrichir l'ancienne", je suis d'accord dans une certaine mesure, mais il est plus que possible qu'un jour tu aies besoin d'une variante pour une des classes appelantes... en quel cas (et ça je l'ai vu des milliers de fois), tu ajouteras un boolean en paramètre de la méthode, etc.

    Juste pour info, un paramètre boolean est aussi un code smell.

    C'est toujours la même chose en fait, pseudo pragmatisme vs clean code (le clean code venant de l'experience de gens ayant fait les erreurs avant). Si je suis aussi exigeant sur la théorie, c'est parce que mon métier est de refactorer ces applications catastrophiques... Pensez vous que mes clients se sont dit au départ "ça va être la merde à long terme" ? Non, ils se sont dit "on a pas le temps pour ces conneries théoriques, on est pragmatique ici" et ont généralement une à deux personnes full time sur la résolution de bugs...

  2. #22
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Pensez vous que mes clients se sont dit au départ "ça va être la merde à long terme" ? Non, ils se sont dit "on a pas le temps pour ces conneries théoriques, on est pragmatique ici
    Malheureusement on est souvent conscient que ça va être la merde à long terme. Mais quand on te chiffre X jours sur quelques choses où il faudrait X*2 pour bien faire ... ba tu fais pas bien

    C'est d'ailleurs pour ça que c'est souvent dans le monde pro que tu vois des trucs horrible , les contraintes de temps et de budget font souvent que les "best practice" passent à la trappe.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #23
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pour revenir au sujet de départ :
    Je ne suis pas fan des traits, parce que, pour moi, ça cache les dépendances, surtout si on utilises des alias. Genre dans ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    use DateHelper
    {
    	anneeUniv as autreNom;
    }
     
    protected function afficherListe($arguments)
    {
    	$annee_univ_actuelle = $this->autreNom();
    }
    Si jamais on modifie anneeUniv(), bon courage pour te rendre compte que ça va impacter afficherListe Au moins, avec une méthode statique, on aura clairement l'appel à DateHelper::anneeUniv.

    Après, entre statique et injection de dépendance, j'aurais tendance à gérer ça en fonction du type de fonctionnalité.

    Si c'est purement technique, du genre "formater la date du format X au format Y", je vais faire une Classe statique avec des méthodes différentes pour les différents formats.

    Par contre, si il y a des règles fonctionnelles, du genre "récupérer le 1er jour de la période", sachant qu'on peut avoir des règles comme "le 1er lundi du mois", "le lundi de la semaine qui contient le 1er jeudi du mois" ou "le mercredi qui suit la pleine lune", là je vais utiliser une interface avec 3 implémentations et faire de l'injection. Comme ça, si la semaine prochaine le client décide que dans telle et telle page, la période suit en fait la règle "pleine lune", j'ai juste à changer la dépendance dans ces pages et le reste continue à marcher comme avant.


    Citation Envoyé par grunk Voir le message
    Citation Envoyé par tdutrion Voir le message
    Pensez vous que mes clients se sont dit au départ "ça va être la merde à long terme" ? Non, ils se sont dit "on a pas le temps pour ces conneries théoriques, on est pragmatique ici"
    Malheureusement on est souvent conscient que ça va être la merde à long terme. Mais quand on te chiffre X jours sur quelques choses où il faudrait X*2 pour bien faire ... ba tu fais pas bien
    On a dit les clients grunk, pas les dev Le client c'est celui qui paye et qui veut tout, tout de suite et pour pas cher. (*) Du coup, le dev code comme il peut pour que ça fonctionne dans les temps et tant pis si on prend des raccourcis.

    Pour avoir bossé à la fois en projet et en maintenance, il y a des fois où, en tant que responsable de maintenance, tu as envie d'étrangler le développeur. Et là tu réalises que le développeur, c'était toi l'année précédente pendant ce fameux rush où l'équipe a fait la conception sur un post-it à l'arrache et zappé la moitié des tests parce que le client a ajouté trois fonctionnalités sans décaler la date de livraison et "parce que sinon on tiendra pas les délais"

    (*) Je caricature bien sûr
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. Bonnes pratiques : doit-on supprimer les listeners ?
    Par adiGuba dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 31/07/2014, 07h38
  2. Où placer les fonctions matlab du file exchange
    Par takfa2008 dans le forum MATLAB
    Réponses: 3
    Dernier message: 07/04/2013, 21h44
  3. [POO] Question sur les fonctions
    Par Carb0 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/11/2008, 15h18
  4. [POO]Où placer les écouteurs d'évènement utilisateur?
    Par ChriGoLioNaDor dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 03/09/2008, 07h28
  5. [POO] Pb avec les fonctions xml et la POO
    Par QuantuX dans le forum Langage
    Réponses: 1
    Dernier message: 17/06/2006, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo